这是这个问题的后续问题:
Finalize/Dispose pattern in C#
所以我明白,如果我正在创建一个使用非托管资源的类,我应该处置它们。链接问题中的答案说终结器处理非托管资源。但是,Dispose(Boolean)
方法也会处理非托管资源:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// get rid of managed resources
}
// get rid of unmanaged resources
}
那么finalizer的处置和dispose方法的处置有什么区别呢?
最佳答案
你会使用它的唯一原因(而且它极具争议性)。
- 终结器允许在对象被垃圾收集器删除之前清除它。 (也就是说,GC负责调用它,并从内存中清除对象)如果开发者忘记调用对象的
Dispose()
方法,那么将有可能释放非托管对象资源,从而避免泄漏。
不这样做的原因有很多,弄错的方法也有很多。简而言之,很少有您需要或想要这样做的理由
关于c# - 终结器中处置的资源与处置中释放的资源有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54304134/