所以我正在制作一个几乎可以制作批量HttpWebRequests的程序。在这个程序中,速度是主要的。如果我能找到将HttpWebRequests增加甚至毫秒的方法,那就太棒了。
好的,我的问题是这样的:我有一个方法对一个站点发出HttpWebRequest(GET请求),另一个方法是对一个主机发出一个POST HttpWebRequest(略有不同的URL,但是同一个主机),这是每隔一段时间就叫第一种方法。
在我的第一个方法(GET请求,假设方法A)中,我在读取响应主体后关闭了WebResponse。让这个WebResponse保持打开状态,然后调用POST方法(让我们说方法B),或者我现在应该怎么做,从方法A关闭WebResponse是不是更快?
示例代码:
public string MethodA()
{
// Make a HttpWebRequest to a URL like: xxxx.yyyy.com
WebResponse response = request.GetResponse();
string x = ReadResponseBody(response);
response.Close();
if(x.Contains("something"))
MethodB();
}
public void MethodB()
{
// Make a POST HttpWebRequest to a URL like: xxxx.zzzz.com (same host).
WebResponse response = request.GetResponse();
response.Close();
}
那么,我应该保留我的代码,关闭MethodA()中的第一个WebResponse,然后调用MethodB()或其他东西吗?
另外,任何人都可以提供一些关于如何提高速度的技巧,因为这是我程序中最重要的事情,我需要它尽可能快。
答案 0 :(得分:10)
您绝对关闭WebResponse
- 理想情况下使用using
语句:
using (WebResponse response = request.GetResponse())
{
string x = ReadResponseBody(response);
}
如果您不关闭响应,则框架不知道您已完成响应,并且不会重复使用该连接。如果您执行关闭响应,则会将连接返回到该主机的池中,并且可以重复使用。
由于每个主机有一个连接限制(可配置),因为您的进程等待Web响应最终确定,因此无法关闭响应可能会导致超时或死锁,然后表现得像关闭)。你真的不想等待垃圾收集器碰巧注意到你已经完成的响应:)