c# - 如果 .NET 中的 MemoryStream 未关闭,是否会产生内存泄漏?

标签 c# .net memory-leaks memorystream

我有以下代码:

MemoryStream foo(){
    MemoryStream ms = new MemoryStream();
    // write stuff to ms
    return ms;
}

void bar(){
    MemoryStream ms2 = foo();
    // do stuff with ms2
    return;
}

我分配的 MemoryStream 是否有可能以后因某种原因无法处理?

我有一个同行评审坚持要我手动关闭它,但我找不到信息来判断他的观点是否有效。

最佳答案

你不会泄漏任何东西——至少在当前的实现中是这样。

调用 Dispose 不会更快地清理 MemoryStream 使用的内存。它阻止您的流在调用后进行读/写调用,这可能对您有用,也可能没有用。

如果您绝对确定您永远不想从 MemoryStream 移动到另一种流,那么不调用 Dispose 不会对您造成任何伤害。然而,这通常是一种很好的做法,部分原因是如果您曾经确实更改为使用不同的 Stream,您不想因为您早早选择了简单的出路而被难以发现的错误所困扰上。 (另一方面,有 YAGNI 论点...)

无论如何都要这样做的另一个原因是新实现可能引入将在 Dispose 上释放的资源。

关于c# - 如果 .NET 中的 MemoryStream 未关闭,是否会产生内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/234059/

相关文章:

c++ - 避免 Boost Log 琐碎使用中的泄漏

c# - 使用命名的捕获组会导致不同的匹配

c# - 委托(delegate)、Lambda、Action、Func、匿名函数

.net - 使用 .NET 字符串格式化,如何格式化字符串以显示零 (0) 的空白(空字符串)?

c# - 对锁使用 protected 字段是否可以(或者我可以避免 protected 锁而不添加辅助方法,如获取锁等。在基础中)?

C#:如何避免这种潜在的内存泄漏

c# - 如何在 LINQ 表达式中对多个级别进行排序?

c# - 删除 Entity Framework Code First 中的联结表记录 (M :M)

.net - DataReader:指定的强制转换无效 (Int32)

Android:通过处理程序发送大量消息时出现明显的内存泄漏