2

所以我正在制作一个几乎可以生成大量 HttpWebRequests 的程序。在这个程序中,速度是主要的。如果我能找到将 HttpWebRequests 增加一毫秒的方法,那就太好了。

好的,所以我的问题是:我有一个向站点发出 HttpWebRequest(GET 请求)的方法,以及另一个向同一主机(URL 略有不同,但主机相同)发出 POST HttpWebRequest 的方法,该方法在第一种方法每隔一段时间。

在我的第一个方法(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(),还是其他什么?

另外,任何人都可以提供更多关于如何提高速度的提示,因为这是我的程序中最重要的事情,我需要它尽可能快。

4

1 回答 1

11

您应该绝对关闭WebResponse- 理想情况下使用以下using语句:

using (WebResponse response = request.GetResponse())
{
    string x = ReadResponseBody(response);
}

如果你关闭响应,框架不知道你已经完成了它,并且不会重用连接。如果您确实关闭了响应,则连接将返回到该主机的池中,并且可以重复使用。

由于每个主机都有连接限制(可配置),因此无法关闭响应可能会导致超时或死锁,因为您的进程会等待 Web 响应最终确定(然后其行为类似于关闭)。您真的不想等待垃圾收集器碰巧注意到您已经完成的响应:)

于 2013-10-12T12:26:44.667 回答