Ich schreibe eine Anwendung, um zu messen, wie schnell ich Webseiten mit C# herunterladen kann. Ich gebe eine Liste mit eindeutigen Domainnamen an, dann spawne ich eine Anzahl von Threads und führe HTTPWebRequests aus, bis die Liste der Domains verbraucht ist. Das Problem ist, dass egal wie viele Threads ich verwende, ich nur etwa 3 Seiten pro Sekunde bekomme.Concurrency Limit auf HttpWebRequest
Ich entdeckte, dass die System.Net.ServicePointManager.DefaultConnectionLimit 2 ist, aber ich hatte den Eindruck, dass dies mit der Anzahl der Verbindungen pro Domäne verbunden ist. Da jede Domäne in der Liste eindeutig ist, sollte dies kein Problem sein.
Dann habe ich festgestellt, dass die GetResponse() -Methode den Zugriff von allen anderen Prozessen blockiert, bis die WebResponse geschlossen ist: http://www.codeproject.com/KB/IP/Crawler.aspx#WebRequest, ich habe keine anderen Informationen im Web gefunden, um diesen Anspruch zu untermauern, jedoch habe ich eine HTTP-Anfrage implementiert Steckdosen, und ich bemerkte eine deutliche Beschleunigung (4x bis 6x).
Also meine Fragen: weiß jemand genau, wie die HttpWebRequest Objekte funktionieren?, Gibt es eine Workaround neben dem, was oben erwähnt wurde? Oder gibt es Beispiele für Hochgeschwindigkeits-Crawler in C# irgendwo geschrieben?
Sie können das Verbindungslimit pro Domäne konfigurieren, aber das Verbindungslimit ist standardmäßig global. https://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx – Todd