c# - 关闭 HttpWebRequest 以释放资源

标签 c# stream httpwebrequest

我正在用 C# 创建 HTTP WebRequests 来浏览网站。我创建请求,获得响应并将其读入 StreamReader。然后我使用相同的请求变量来创建一个新的请求并获得一个新的响应...

下面是我的代码:

HttpWebRequest request;
WebResponse response;
Stream responseStream;
StreamReader reader;
string responseFromServer;

request = (HttpWebRequest)WebRequest.Create("https://www.firstRequest.com");

//set cookies and headers here... 

response = request.GetResponse();

responseStream = response.GetResponseStream();
reader = new StreamReader(responseStream);
responseFromServer = reader.ReadToEnd();


//second request using the same variables
request = (HttpWebRequest)WebRequest.Create("https://www.secondRequest.com");
response = request.GetResponse();

responseStream = response.GetResponseStream();
reader = new StreamReader(responseStream);
responseFromServer = reader.ReadToEnd();

我知道我必须关闭响应、流和流读取器以释放资源。 我是否必须在每个请求之间或仅在所有请求结束时执行此操作?

最佳答案

是的,你每次都需要清理自己。只需使用您忽略的 IDisposable 功能:

所以,相反,你可以

using(response = request.GetResponse())
{
    using(responseStream = response.GetResponseStream())
    {
        using(reader = new StreamReader(responseStream))
        {
            responseFromServer = reader.ReadToEnd();
        }
    }
}

或更简洁:

using(response = request.GetResponse())
using(responseStream = response.GetResponseStream())
using(reader = new StreamReader(responseStream))
{
    responseFromServer = reader.ReadToEnd();
}

...现在您无需担心调用Close。 IDisposable 实现会为您处理(当 using block 结束时)。

关于c# - 关闭 HttpWebRequest 以释放资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29652419/

相关文章:

c# - 创建通用存储库的异步版本

c# - 从混合了 XML 和纯文本的流中读取

c# - 异步方法中的 Task.Run() 导致线程池饥饿?

c# - 在 ListView 中对项目进行分组 - Windows 应用商店应用

ios - 无法写入使用 CFStreamCreatePairWithSocket 成功创建的 CFWriteStream

stream - Racket 中的可变 zip

c# - 强制 HttpWebRequest 发送客户端证书

C# 在不使用 WinPcap 的情况下监听 HTTP 请求?

c# - 传递数据并重定向到 .net 中的新页面

c# - 手动发送分块请求