HTTPWebResponse + StreamReader Très Lent
Je suis en train de mettre en œuvre limitée de crawler web en C# (pour quelques centaines de sites seulement)
à l'aide de HttpWebResponse.GetResponse() et Streamreader.ReadToEnd() , a également essayé à l'aide de StreamReader.Read() et une boucle pour créer ma chaîne HTML.
Je suis seulement de téléchargement des pages qui sont de 5-10K.
C'est très lent! Par exemple, la moyenne de la GetResponse() est d'environ une demi-seconde, alors que la moyenne StreamREader.ReadToEnd() est d'environ 5 secondes!
Tous les sites devraient être très rapide, car ils sont très proches de ma position, et ont des serveurs rapides. (dans l'Explorateur de pratiquement rien pour D/L) et je ne suis pas en utilisant un proxy.
Mon Robot a environ 20 threads de lecture simultanément à partir du même site. Cela pourrait-il être la cause du problème?
Comment puis-je réduire StreamReader.ReadToEnd fois de façon DRASTIQUE?
Vous devez vous connecter pour publier un commentaire.
HttpWebRequest peut prendre un certain temps à détecter votre les paramètres de proxy. Essayez d'ajouter ceci à votre demande de config:
Vous pouvez également voir un léger gain de performance de mise en mémoire tampon de votre lit afin de réduire le nombre d'appels reçus par le système d'exploitation de socket:
WebClient est DownloadString est un simple wrapper pour HttpWebRequest, pourriez-vous essayer d'utiliser que temporairement et de voir si la vitesse s'améliore? Si les choses deviennent beaucoup plus rapide, pourriez-vous partager votre code afin que nous puissions avoir un regard sur ce que peut être le problème avec elle?
EDIT:
Il semble HttpWebRequest observe IE 'max connexions simultanées", de ces URLs sur le même domaine? Vous pourriez essayer d'augmenter la limite de connexions pour voir si cela aide? J'ai trouvé cet article sur le problème:
J'ai eu le même problème, mais lorsque je me suis assis la HttpWebRequest Proxy paramètre est null, il a résolu le problème.
Avez-vous essayé ServicePointManager.maxConnections? J'ai l'habitude de le régler à 200 pour des choses similaires à ce.
J'ai eu des problème le même problème mais en pire.
réponse = (HttpWebResponse)webRequest.GetResponse(); dans mon code
retardée d'environ 10 secondes avant d'exécuter le code, et après cela, le téléchargement saturé ma connexion.
kurt réponse defaultProxy enabled="false"
résolu le problème. maintenant, la réponse est presque instantanément et je peux télécharger tout fichier http lors de mes connexions vitesse maximale 🙂
désolé pour le mauvais anglais
J'ai trouvé l'Application Config méthode n'a pas fonctionné, mais le problème était toujours en raison de la configuration du serveur proxy. Mon simple demande utilisé pour prendre jusqu'à 30 secondes, maintenant il faut de 1.
Merci à vous tous pour les réponses, elles m'ont aidé à creuser dans la bonne direction. J'ai fait face au même problème de performance, si la solution proposée à la demande de changement de fichier de config (ce que j'ai compris que la solution est pour les applications web) ne correspond pas à mes besoins, ma solution est indiqué ci-dessous:
Pourquoi ne pas le multithreading résoudre ce problème? Le Multithreading permettrait de minimiser le réseau des temps d'attente, et puisque vous seriez le stockage du contenu de la mémoire tampon dans la mémoire système (RAM), il n'y aurait pas d'IO goulot d'étranglement de traiter avec un système de fichiers. Ainsi, votre 82 pages qui prennent 82 secondes pour le téléchargement et l'analyse, devrait prendre 15 secondes (en supposant un processeur 4x). Corrigez-moi si je me manque quelque chose.
____ TÉLÉCHARGER LE THREAD_____*
De Télécharger Du Contenu
Forme De Flux
Lire Le Contenu
_________________________*