关闭 WebResponse,或保持打开状态

本文关键字:状态 WebResponse 关闭 | 更新日期: 2023-09-27 18:34:57

所以我正在制作一个几乎可以批量使用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,或保持打开状态

您应该绝对关闭WebResponse - 最好使用using语句:

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

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

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