<分区>
我最近一直在使用 DotSpatial 库,发现我的程序内存泄漏非常严重。我一直在使用 VS 内存诊断工具,并设法将问题缩小到以下(简化的)代码块:
using (var inMemoryStream = new MemoryStream())
using (var _writer = new BinaryWriter(inMemoryStream))
{
WriteHeader(_writer);
_writer.Close();
}
BinaryWriter 对象维护对分配给它的 OutStream 属性的 inMemoryStream 对象的引用。似乎无论使用何种处置方法(使用/关闭/处置),此内存流都不会释放为其缓冲区分配的内存。
我设法通过创建一个继承自 BinaryWriter 的类、覆盖 Close() 并向该方法添加“OutStream = null”来解决这个问题,但这看起来很笨拙。
我错过了什么吗? BinaryWriter 不应该完全处理传递给它的流吗?似乎 BinaryWriter.Close() 确实尝试为此效果做一些事情,因为使用智能感知查看 OutStream 的某些属性会显示 ObjectDisposed 异常。如果这有所不同,我正在使用 .NET 4.5.2。
提前多谢指教