我一直在注意到我的某些服务中的内存泄漏,我正在努力确保我正确处理资源。我有以下代码用于发送外部Http请求。我不确定我是否遗漏了任何内容,或者是否有太多使用语句。
string str = string.Empty;
WebRequest request = WebRequest.Create(paramBuilder.ToString());
request.ContentLength = 0;
request.Method = "GET";
using (WebResponse response = request.GetResponse())
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream))
{
str = reader.ReadToEnd();
reader.Close();
return str;
}
}
}
}
答案 0 :(得分:2)
使用语句不能“太多”。
使用using
只会为IDisposable
资源创建一个范围,以便在它离开该范围时调用IDisposable.Dispose()
。 IDisposable.Dispose()
的良好实现应该容忍已经处理的对象,因此额外的Dispose()
调用不会影响模式的正确实现。
您对reader.Close()
的致电并非绝对必要,因为读者在处理时将被关闭。
我没有在发布的代码中看到任何明显的内存泄漏源。尝试使用Visual Studio中包含的内存分析器来隔离实际原因。
答案 1 :(得分:1)
在最后using
语句后,您只需要花括号。
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
str = reader.ReadToEnd();
return str;
}
否则你的代码看起来没问题。