C#多线程HttpWebRequest超时。。救命啊!

C#多线程HttpWebRequest超时。。救命啊!,c#,multithreading,httpwebrequest,C#,Multithreading,Httpwebrequest,我在C#中实现了一个多线程爬虫程序。 使用一个自定义线程池,有一个作业队列,所有要下载的页面都排成队列,每个线程取一个并下载 使用15个线程, 当只在一个站点上爬行时,它就像丝绸一样光滑,而且完成得很快。 当同时在不同的服务器上爬行多个站点时,我会遇到大量超时 这可能与DNS解析有关吗? 你认为什么会导致这种情况发生 谢谢。 Roey如前所述,HttpWebRequest存在连接限制。请参见MSDN中的内容。您大概是在Windows上运行此功能的。虽然您可能正在配置HttpWebRequest允

我在C#中实现了一个多线程爬虫程序。 使用一个自定义线程池,有一个作业队列,所有要下载的页面都排成队列,每个线程取一个并下载

使用15个线程, 当只在一个站点上爬行时,它就像丝绸一样光滑,而且完成得很快。 当同时在不同的服务器上爬行多个站点时,我会遇到大量超时

这可能与DNS解析有关吗? 你认为什么会导致这种情况发生

谢谢。
Roey

如前所述,HttpWebRequest存在连接限制。请参见MSDN中的内容。

您大概是在Windows上运行此功能的。虽然您可能正在配置
HttpWebRequest
允许的连接数,但这不会更改Windows强加的限制。例如,据我所知,对于XP SP2,微软规定了每秒10个连接的限制。如果您有大量积压的连接等待允许打开,它们可能会因未及时授予权限而超时


诚然,我对这个问题没有太多的见解,因为我从来没有遇到过这个问题。尝试限制您尝试建立的连接数量,看看这是否会减少超时。

我认为连接限制是每台服务器的连接限制-一台服务器的实时连接不超过10个。他的爬虫与不止一台服务器进行通信。因此,如果您运行15个线程,每个线程访问不同的服务器,您会从所有线程中获得超时?这是不一致的。。有些服务器给了我大量的超时时间,有些则没有。。在每台服务器上独立运行(但线程数相同)几乎不会产生超时。