我編寫了一個很長時間(幾個月)在我們的服務器上運行的.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等,可以不會導致內存泄漏沒有處置?如果應用程序退出,當然,整個過程將隨着所分配的資源一起被殺死。但是,在長時間無限期運行的服務中,這可能是一個真正的問題。我錯過了什麼嗎? –