c# - 终结器中处置的资源与处置中释放的资源有什么区别

标签 c# idisposable finalizer

这是这个问题的后续问题:

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方法的处置有什么区别呢?

最佳答案

你会使用它的唯一原因(而且它极具争议性)。

  1. 终结器允许在对象被垃圾收集器删除之前清除它。 (也就是说,GC负责调用它,并从内存中清除对象)如果开发者忘记调用对象的Dispose()方法,那么将有可能释放非托管对象资源,从而避免泄漏。

不这样做的原因有很多,弄错的方法也有很多。简而言之,很少有您需要或想要这样做的理由

关于c# - 终结器中处置的资源与处置中释放的资源有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54304134/

相关文章:

java - 测量创建和销毁一个简单对象的时间

c# - 从 MemoryStream 加载时位图中没有透明度

c# - 在单击位置绘制一个新的圆位图,同时保留以前绘制的圆

c# - C# 中 'new' 的性能成本?

c# - 何时/如何调用 IDisposable.Dispose?

c# - struct类型的深拷贝在 “Using……”的block中是不是也被dispose了?

.net - 'System.Net.Mail.SmtpClient' 类型的“使用”操作数必须实现 'System.IDisposable' - (.NET 3.5)

.net - GC.SuppressFinalize 性能与不可终结对象相比

c# - 谁能解释这种终结行为

c# - 使用 Entity Framework 将存储过程结果保存在数据集中