我编写了一个很长时间(几个月)在我们的服务器上运行的.NET C#windows服务。C#StreamReader关闭 - 内存泄漏?
昨天我检查了一下,发现它使用了600MB的内存。 我重新启动服务,现在它使用60MB RAM。
我已经开始检查它为何使用这么多内存。 下面的函数会导致内存泄漏吗?
我认为它丢失.Close()为StreamReader。
作为一个测试,我在循环中运行了以下函数1000次,并且我没有看到内存正在增加。
private static string GetTemplate(string queryparams)
{
WebRequest request = HttpWebRequest.Create(uri);
request.Method = WebRequestMethods.Http.Get;
WebResponse response = request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string tmp = reader.ReadToEnd();
response.Close();
}
不知道有关内存泄漏,我只是看到任务管理器中使用600MB内存(我总共只有4GB)的服务,它对我来说没有任何意义。 – RuSh
无论如何修复你的代码:)。要确认它是否泄漏 - 最好使用.Net的内存分析器(搜索 - 大量信息),但是您可以通过向GC.Collect添加调用足以进行调查并查看内存使用量增长是否始终稳定在一定的价值。确保你知道如何重现病情 - 否则你会如何知道行为是否改变。 –
阿列克谢,是否有什么特别的StreamReader等,可以不会导致内存泄漏没有处置?如果应用程序退出,当然,整个过程将随着所分配的资源一起被杀死。但是,在长时间无限期运行的服务中,这可能是一个真正的问题。我错过了什么吗? –