我构建此方法 (c#) 是为了从 URL 接收 HTTP 响应状态代码。
当我运行这个方法时,它工作正常,但是当我循环运行它时,第三次它卡住了。有什么线索吗?
public static string isAlive(string url)
{
Console.WriteLine("start: Is Alive Test");
WebRequest request = WebRequest.Create(url);
try
{
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
return Convert.ToString((int)response.StatusCode);
}
catch(WebException ex)
{
HttpWebResponse res = (HttpWebResponse)ex.Response;
return Convert.ToString((int)res.StatusCode);
}
}
the loop
for (int i = 0; i < 5; i++)
{
string a = isAlive("https://www.yahoo.com/");
Console.WriteLine(a);
}
你没有打电话Dispose
on the HttpWebResponse
对象,这意味着连接仍然存在。如果您将代码更改为以下内容:
public static string isAlive(string url)
{
Console.WriteLine("start: Is Alive Test");
WebRequest request = WebRequest.Create(url);
try
{
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
return Convert.ToString((int)response.StatusCode);
}
}
catch(WebException ex)
{
using(HttpWebResponse res = (HttpWebResponse)ex.Response)
{
return Convert.ToString((int)res.StatusCode);
}
}
}
the using
语句将隐式为您调用 Dispose,这将关闭连接。
您的代码在第二次迭代后停止的原因是因为 .Net 有一个内置的最大连接数,它将打开到网站,默认情况下为 2。这是由System.Net.ServicePointManager.DefaultConnectionLimit
如果需要,您可以增加。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)