J'écris une application pour mesurer à quelle vitesse je peux télécharger des pages Web en utilisant C#. Je fournis une liste de noms de domaine uniques, puis je génère X nombre de threads et j'effectue HTTPWebRequests jusqu'à ce que la liste des domaines ait été utilisée. Le problème est que peu importe le nombre de threads que j'utilise, je ne reçois que 3 pages par seconde.Limite de simultanéité sur HttpWebRequest
J'ai découvert que System.Net.ServicePointManager.DefaultConnectionLimit est 2, mais j'avais l'impression que cela est lié au nombre de connexions par domaine. Étant donné que chaque domaine de la liste est unique, cela ne devrait pas poser de problème.
Ensuite, j'ai trouvé que la méthode GetResponse() bloque l'accès de tous les autres processus jusqu'à la fermeture de WebResponse: http://www.codeproject.com/KB/IP/Crawler.aspx#WebRequest, je n'ai trouvé aucune autre information sur le web pour soutenir cette revendication, cependant j'ai implémenté une requête HTTP en utilisant prises, et j'ai remarqué une accélération significative (4x à 6x). Donc mes questions: quelqu'un sait exactement comment les objets HttpWebRequest fonctionnent ?, existe-t-il une solution de contournement en dehors de ce qui a été mentionné ci-dessus ?, ou existe-t-il des exemples de crawlers web à haute vitesse écrits en C# n'importe où?
Vous pouvez configurer la limite de connexion par domaine, mais par défaut, la limite de connexion est globale. https://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx – Todd