c# 使用 HttpWebRequest 建立巨大的内存
c# Huge memory build-up with HttpWebRequest
您好,我在使用 httpwebrequest 时遇到问题,当 运行 一个相当大的基于请求的程序时,会产生大量内存。唯一可能发生累积的地方是在发送请求后读回流,我将如何解决这个问题或更好地为此类事情设置限制?
我也有各种 (10-15) if 语句在响应主体中寻找各种东西但即将将它们更改为 switch 语句,尽管我怀疑它们会导致如此高的内存累积我认为它最好提一下他们。我的请求如下所示:
HttpWebResponse response = null;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0");
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.88";
response = (HttpWebResponse)request.GetResponse();
string _responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();
catch (WebException e)
{
}
catch (UriFormatException p)
{
}
如您所见,我的流是通过 _responseData 回读的,然后我使用 .contains 来查看我要查找的内容是否存在。
- 将 HttpWebRequest.AllowWriteStreamBuffering 设置为 false。
- 配置 HttpWebResponse、Stream 和 StreamReader。
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowWriteStreamBuffering = false;
request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0");
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.88";
string _responseData;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
{
_responseData = sr.ReadToEnd();
}
}
}
}
catch (WebException e)
{
}
catch (UriFormatException p)
{
}
您好,我在使用 httpwebrequest 时遇到问题,当 运行 一个相当大的基于请求的程序时,会产生大量内存。唯一可能发生累积的地方是在发送请求后读回流,我将如何解决这个问题或更好地为此类事情设置限制?
我也有各种 (10-15) if 语句在响应主体中寻找各种东西但即将将它们更改为 switch 语句,尽管我怀疑它们会导致如此高的内存累积我认为它最好提一下他们。我的请求如下所示:
HttpWebResponse response = null;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0");
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.88";
response = (HttpWebResponse)request.GetResponse();
string _responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();
catch (WebException e)
{
}
catch (UriFormatException p)
{
}
如您所见,我的流是通过 _responseData 回读的,然后我使用 .contains 来查看我要查找的内容是否存在。
- 将 HttpWebRequest.AllowWriteStreamBuffering 设置为 false。
- 配置 HttpWebResponse、Stream 和 StreamReader。
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.AllowWriteStreamBuffering = false;
request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0");
request.Headers.Add("Upgrade-Insecure-Requests", @"1");
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.88";
string _responseData;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
{
_responseData = sr.ReadToEnd();
}
}
}
}
catch (WebException e)
{
}
catch (UriFormatException p)
{
}