0

我一直注意到我的一些服务中似乎存在内存泄漏,我正在努力确保我正在正确处理资源。我有以下代码用于发送外部 Http 请求。我不确定我是否遗漏了什么,或者是否有太多using语句。

        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;
                }
            }
        }
    }
4

2 回答 2

2

您不能有“太多” using 语句。

使用using只是为资源创建一个范围,IDisposable以便在它离开该范围时IDisposable.Dispose()被调用。一个好的实现IDisposable.Dispose()应该容忍已经被释放的对象,所以额外的Dispose()调用不会影响模式的正确实现。

您的调用reader.Close()并不是绝对必要的,因为阅读器在处理时将被关闭。

我在发布的代码中没有看到任何明显的内存泄漏来源。尝试使用诸如 Visual Studio 中包含的内存分析器来隔离实际原因。

于 2013-05-24T16:25:09.150 回答
1

using您只需要在最后一条语句之后使用花括号。

using (WebResponse response = request.GetResponse())
using (Stream stream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(stream))
{
    str = reader.ReadToEnd();
    return str;
}

否则你的代码看起来没问题。

于 2013-05-24T16:24:57.300 回答