所以我正在制作一个几乎可以批量使用HttpWebRequests的程序。在这个程序中,速度是主要的东西。如果我能找到将HttpWebRequests增加哪怕一毫秒的方法,那就太好了。
好的,所以我的问题是:我有一个向站点发出 HttpWebRequest (GET 请求(的方法,以及另一种向同一主机(略有不同的 URL,但相同的主机(发出 POST HttpWebRequest 的方法,每隔一段时间称为第一个方法之后。
在我的第一种方法(GET 请求,假设方法 A(中,我在阅读响应正文后关闭 WebResponse。让此 Web 响应保持打开状态,然后调用 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((,还是其他什么?
另外,任何人都可以提供更多有关如何提高速度的提示,因为它是我的程序中最重要的事情,我需要它尽可能快。
您应该绝对关闭WebResponse
- 最好使用using
语句:
using (WebResponse response = request.GetResponse())
{
string x = ReadResponseBody(response);
}
如果不关闭响应,框架将不知道已完成响应,并且不会重用连接。如果关闭响应,则连接将返回到该主机的池中,并且可以重复使用。
由于每个主机都有连接限制(可配置(,因此未能关闭响应可能会导致超时或死锁,因为您的进程会等待 Web 响应最终确定(然后行为类似于关闭(。您真的不想等待垃圾回收器碰巧注意到您已经完成的响应:)