WinInet: Почему первый HttpSendRequest занимает больше времени? - PullRequest
1 голос
/ 10 октября 2009

Обещаю, это не так просто, как кажется. Мне интересно, почему первый в истории вызов HttpSendRequest занимает намного больше времени, чем последующие вызовы, даже если последующие запросы относятся к другому URL-адресу. Например:

InternetConnect (... "foo.com" ...) // немедленно возвращается
HttpOpenRequest (...) // немедленно возвращает
HttpSendRequest (...) // занимает ~ 3 сек
HttpSendRequest (...) // занимает ~ 200 мс

InternetConnect (... "bar.com" ...) // немедленно возвращается
HttpOpenRequest (...) // немедленно возвращает
HttpSendRequest (...) // занимает ~ 200 мс

Почему первый HttpSendRequest (...) занимает намного больше времени? Это очень согласованно, независимо от URL.

Спасибо, Грег

Ответы [ 2 ]

1 голос
/ 10 октября 2009

Есть несколько вещей, которые могут потребоваться при первом запросе, но не обязательно при втором. Поиск DNS и обнаружение прокси немедленно приходят на ум.

0 голосов
/ 10 октября 2009

Это также может быть загрузка файла конфигурации. Некоторые классы .Net Framework будут пытаться считывать настройки из файла конфигурации приложения, возвращаясь к значениям по умолчанию, если файл или настройка не найдены. Например. WebRequest / WebClient, который, я думаю, используется классами Http, будет проверять явные настройки веб-прокси, если они не существуют, тогда выбираются настройки прокси из ОС (как установлено в IE). Все это способствует начальной задержке запуска, как правило, при первом использовании класса, то есть работа часто выполняется в статическом конструкторе.

Настройки конфигурации определены здесь:

Схема файла конфигурации для .NET Framework

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...