我一直注意到我的一些服务中似乎存在内存泄漏,我正在努力确保正确地处理资源。下面的代码用于发送外部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;
}
}
}
}发布于 2013-05-24 16:25:09
您不能让“太多”使用语句。
使用using只会为IDisposable资源创建一个作用域,这样当它离开该范围时,IDisposable.Dispose()就会被调用。一个好的IDisposable.Dispose()实现应该能够容忍已经被释放的对象,所以额外的Dispose()调用不会影响模式的正确实现。
您对reader.Close()的调用不是绝对必要的,因为当它被释放时,读取器将关闭。
在发布的代码中,我没有看到任何明显的内存泄漏源。尝试使用内存分析器(例如Visual中包含的内存分析器)来隔离实际原因。
发布于 2013-05-24 16:24:57
您只需要在上一次using语句之后使用大括号。
using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
str = reader.ReadToEnd();
return str;
}否则你的代码看上去没问题。
https://stackoverflow.com/questions/16739528
复制相似问题