我正在编写一个程序来使用C#HTTTWebRequest来抓取网页.由于我需要监视特定URL的更新,因此我按如下方式编写代码.但是,我注意到我只能得到两次回复.在那之后,它没有得到回应.即使我将时间延长到一分钟,我仍然遇到同样的问题.我不明白为什么.你能帮我个忙吗?非常感谢!
GreatFree
while (true)
{
WebRequest http = HttpWebRequest.Create("http://www.sina.com.cn");
HttpWebResponse response = (HttpWebResponse)http.GetResponse();
Console.WriteLine(response.LastModified);
Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)
imaximchuk的答案是正确的,但它没有解释原因.
汇总HTTP连接 - 如果新请求可用,则将重新使用一个连接 - 并在关闭或处置Web响应时将连接返回到池.在您的情况下,您没有关闭或处理响应,因此它不会返回到池中.与任何特定主机的最大连接数是可配置的,但通常不应更改.默认是两个连接 - 这就是为什么你看到两个工作响应然后超时.
我相信在某个地方会有一个终结器,当它注意到相关对象有资格进行垃圾收集时会释放连接,但那是不确定的.
基本上:始终关闭Web响应,理想的使用using语句.
while (true)
{
WebRequest http = WebRequest.Create("http://www.sina.com.cn");
using (HttpWebResponse response = (HttpWebResponse)http.GetResponse())
{
Console.WriteLine(response.LastModified);
}
Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |