gpt4 book ai didi

c# - 关闭 WebResponse,还是保持打开状态?

转载 作者:行者123 更新时间:2023-11-30 19:17:08 27 4
gpt4 key购买 nike

所以我正在制作一个程序,它几乎可以生成批量 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(),还是其他什么?

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

最佳答案

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

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

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

由于每个主机都有一个连接限制(这是可配置的),未能关闭响应可能会导致超时或死锁,因为您的进程会等待网络响应完成(这将然后表现得像关闭)。您真的不想等待垃圾收集器碰巧注意到您已经完成的响应:)

关于c# - 关闭 WebResponse,还是保持打开状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19334148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com