gpt4 book ai didi

c# - WebRequest/WebResponse 内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 19:40:03 28 4
gpt4 key购买 nike

我有一个 .Net Framework #4.0 应用程序,它使用 WebRequest/WebResponse 类发出大量 Web 请求,因为我发现它有内存泄漏(或者我做错了什么)我写了一些简单的小应用程序来演示这一点:

class Program
{

public static void Main(string[] args)
{
while(true)
{
var webRequest = (HttpWebRequest)WebRequest.Create("http://www.gooogle.com");
Init(webRequest);
using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
{
var responseStream = webResponse.GetResponseStream();

responseStream.ReadTimeout = 30;
var streamReader = new StreamReader(responseStream, Encoding.UTF8);
var page = streamReader.ReadToEnd();

streamReader.Close();
streamReader.Dispose();

responseStream.Close();
responseStream.Dispose();

webResponse.Close();

Console.WriteLine("Done");

//GC.Collect();
}
}
}

private static void Init (HttpWebRequest webRequest)
{
webRequest.Method = "GET";
webRequest.Host = "www.gooogle.com";
webRequest.UserAgent =
"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB6.5; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; OfficeLiveConnector.1.4; OfficeLivePatch.1.3; .NET4.0C; .NET4.0E; InfoPath.3) chromeframe/5.0.375.62";
webRequest.Accept =
"application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
webRequest.KeepAlive = true;
}
}

我想出的唯一解决方案是使用 GC.Collect()(示例中未标记),所有对象都已处理,所有流都已关闭,我是否遗漏了什么?

我发现了一些东西,但我不明白原因,如果我最小化控制台,内存使用量会减少并且看起来正常,这可能是什么原因是 Conosole 或 WinForm 有问题,我该如何解决?

最佳答案

您在紧密循环中分配内存。您可能没有内存泄漏,您的应用程序表现不佳(从某种意义上说,它无缘无故地占用了大量系统资源。)

垃圾收集器不会为了压缩释放的内存而中断循环,除非由于内存压力而不得不这样做。简单的解决方法是在循环迭代之间引入延迟(可以像 Thread.Sleep 一样简单,但我不建议这样做。)

一旦您的程序没有如此努力地消耗所有可用的 CPU 时间,它应该允许 GC 更频繁地运行。

关于c# - WebRequest/WebResponse 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4372591/

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