J'essaie d'implémenter un moteur de balayage Web limité en C# (pour quelques centaines de sites seulement) en utilisant HttpWebResponse.GetResponse() et Streamreader.ReadToEnd(), également essayé en utilisant StreamReader.Read() et une boucle pour construire ma chaîne HTML.HTTPWebResponse + StreamReader Très lent
Je ne télécharge que des pages d'environ 5-10K.
Tout est très lent! Par exemple, le temps moyen GetResponse() est d'environ une demi-seconde, alors que le temps moyen de StreamREader.ReadToEnd() est d'environ 5 secondes!
Tous les sites doivent être très rapides, car ils sont très proches de mon emplacement et ont des serveurs rapides. (dans l'Explorateur ne prend pratiquement rien à D/L) et je n'utilise aucun proxy.
Mon Crawler possède environ 20 threads qui lisent simultanément depuis le même site. Cela pourrait-il causer un problème?
Comment réduire les temps de StreamReader.ReadToEnd DRASTIQUEMENT? DownloadString de WebClient est un wrapper simple pour HttpWebRequest, pourriez-vous essayer de l'utiliser temporairement et voir si la vitesse s'améliore?
essayé d'utiliser WebClient, les mêmes résultats (le temps moyen n'a pas changé). Je devrais aussi mentionner que j'ai une connexion de 1.5MBPS avec une vitesse d/l moyenne de 180KBPS Je pensais que peut-être 20 threads appelant tous StreamReader.Read en même temps pourrait avoir quelque chose à voir avec elle? Ou est-ce non pertinent? – Roey
Dans mon expérience, sur une connexion comme ça, vous allez saturer la bande passante avec 3-4 threads. Pas besoin de courir plus à moins que les sites que vous ping sont vraiment lents et que vous ayez des threads qui dorment beaucoup, attendant des E/S. – kgriffs
wow !!! J'utilisais async HttpWebRequest pour charger le serveur de test avec environ 300 threads par client et chaque thread était en train de télécharger "en série". En changeant le paramètre maxconnection, chaque thread a téléchargé les données 10 fois plus vite. –