什么时候在类而不是析构函数上实现IDispose?我读了这篇文章,但我仍然没有抓住重点。
我的假设是,如果我在对象上实现IDispose,则可以显式地“销毁”该对象,而不是等待垃圾回收器执行此操作。它是否正确?
这是否意味着我应该始终在对象上显式调用Dispose?常见的例子有哪些?
终结器(也称为析构函数)是垃圾回收(GC)的一部分- 它不确定(何时(甚至)发生),因为GC主要是由于内存压力(例如,需要更多空间)而发生的。终结器通常仅用于清理 非托管 资源,因为托管资源将具有自己的收集/处置。
因此IDisposable用于 确定性地 清理对象,即现在。它不收集对象的内存(仍然属于GC),但是用于关闭文件,数据库连接等。
IDisposable
之前有很多主题:
最后,请注意,IDisposable对象也具有终结器并不罕见。在这种情况下,Dispose()通常调用GC.SuppressFinalize(this),这意味着GC不会运行终结器- 它只会丢弃内存(便宜得多)。如果您忘记了Dispose()该对象,则终结器仍将运行。
Dispose()
GC.SuppressFinalize(this)