WinInet:为什么首先HttpSendRequest需要更长的时间?

时间:2009-10-09 20:04:27

标签: wininet

我保证这并不像听起来那么简单。我想知道为什么第一次调用HttpSendRequest需要比后续调用更长的时间,即使后来的请求是针对不同的URL。例如:

InternetConnect(...“foo.com”...)//立即返回
HttpOpenRequest(...)//立即返回
HttpSendRequest(...)//需要~3秒左右 HttpSendRequest(...)//需要~200 ms

InternetConnect(...“bar.com”...)//立即返回
HttpOpenRequest(...)//立即返回
HttpSendRequest(...)//需要~200 ms

为什么第一个HttpSendRequest(...)花了这么长时间?无论URL如何,这都是非常一致的。

谢谢, 格雷格

2 个答案:

答案 0 :(得分:1)

第一个请求可能需要发生一些事情,而不需要在第二个请求上发生。立即想到DNS查找和代理检测。

答案 1 :(得分:-2)

它也可能是配置文件加载。某些.Net框架类将尝试从应用程序配置文件中读取设置,如果未找到任何文件或设置,则会重新设置为默认值。例如。我认为Http类使用的WebRequest / WebClient将检查显式的Web代理设置,如果那些不存在则接着从OS(在IE中设置)的代理设置被选中。所有这些都会导致初始启动滞后,通常在首次使用类时,即工作通常在静态构造函数内完成。

配置设置在此处定义:

Configuration File Schema for the .NET Framework