Я пишу приложение для определения того, как быстро я могу загружать веб-страницы с помощью C#. Я предоставляю список уникальных доменных имен, затем я создаю X число потоков и выполняю HTTPWebRequests до тех пор, пока не будет уничтожен список доменов. Проблема в том, что независимо от того, сколько потоков я использую, я получаю только 3 страницы в секунду.Ограничение параллелизма на HttpWebRequest
Я обнаружил, что System.Net.ServicePointManager.DefaultConnectionLimit равно 2, но у меня создалось впечатление, что это связано с количеством подключений на домен. Поскольку каждый домен в списке уникален, это не должно быть проблемой.
Затем я обнаружил, что метод GetResponse() блокирует доступ ко всем остальным процессам до закрытия WebResponse: http://www.codeproject.com/KB/IP/Crawler.aspx#WebRequest, я не нашел никакой другой информации в Интернете, чтобы вернуть эту заявку, однако я применил HTTP-запрос, используя и я заметил значительную скорость (4x - 6x).
Так что мои вопросы: кто-нибудь знает, как работают объекты HttpWebRequest ?, есть ли обходное решение помимо того, что было упомянуто выше ?, или есть примеры высокоскоростных веб-сканеров, написанных на C# в любом месте?
Вы можете настроить лимит подключения для каждого домена, но по умолчанию ограничение соединения является глобальным. https://msdn.microsoft.com/en-us/library/fb6y0fyc.aspx – Todd 2016-12-05 01:37:45