它从我开始读一stackoverflow answer为什么我需要在stringreader和stringwriter上调用dispose?
StringWriter
implments上MSDNpublic abstract class TextWriter : MarshalByRefObject, IDisposable
它说:
该框架提供了应 实施提供开发人员手动System.IDisposable接口一旦不需要,可以立即释放非托管 资源。
但是什么被视为非托管资源?我显然不认为StringWriter
符合资格。如果我写我自己没有继承IDisposable的....我看不出有任何需要补充Dispose()
class ConfusedDevStringWriter{
private StringBuilder sb;
public ConfusedDevStringWriter(){ //ctor
sb = new StringBuilder();
}
}
事实上我与Visual Studio调试器的内存测试: 一次函数返回时,
StringWriter
其StringBuilder
被释放...... Moreoever,调用Dispose似乎为StringWriter的什么也不做......
所以不是每一个说和poorly类从IDisposable
rit有用Dispose
。这又回到我的问题什么被视为非托管资源(例子将非常感谢n_n)。我听说文件是其中的一个......但不是CLR的虚拟机?......每个资源都应该由它来管理,不是?从抽象TextWriter
,它实现IDisposable
,并具有一定的子类做有像流,文件句柄等,所以可以安全地处理TextWriter
任何子类的非托管资源,而无需担心
你的问题“*什么被视为非托管资源*”已经有了答案:http://stackoverflow.com/questions/3433197/what-exactly-are-unmanaged-resources – user3185569
问题在标题中回答或多或少HTTP ://Stackoverflow.com/questions/234059/is-a-memory-leak-created-if-a-memorystream-in-net-is-not-closed(关于MemoryStream的Q也一样)。 –
我把它作为http://stackoverflow.com/questions/2475228的一个副本关闭,它和http://stackoverflow.com/questions/3433197可以解答这两个问题。 –