.NET 最终概念问题

标签 .net dispose finalize suppress

不使用finalizecompare比dispose真的更好吗? dispose 是否会在第一次解析时删除非托管资源?

什么是抑制最终确定?

最佳答案

您的 IDisposable 实现应该是:

public MyClass : IDisposable
{
     public void Dispose() 
     {
         Dispose(true);
         GC.SuppressFinalize(this);
     }

     protected Dispose(bool disposing) 
     {
         if( disposing )
         {
             // release unmanaged resource
         }
         // release managed resources
     }

     ~MyClass() 
     {
         Dispose(false);
     }
}

如果一个对象有终结器,则 CLR 会在终结队列中保留对其的引用。如果您手动处置对象(调用 Dispose()),您已经删除了非托管资源(因为 dispose 的实现和终结器是共享的),因此无需调用终结器,您可以安全地从终结中删除该对象队列(调用 GC.SuppressFinalize(this))。

关于.NET 最终概念问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180422/

相关文章:

c# - 为什么 Assembly.Load 在解析引用时似乎不影响当前线程(不是通过反射)?

c# - 我什么时候需要管理托管资源?

c# - OledbConnection.Dispose() 是否关闭连接?

Java 8 关于 finalize 方法的断言是否正确?

c# - MongoDB 可以从 mongo 客户端连接,但不能从 C# 驱动程序连接

c# - 如果我所有的 .Net Controllers/Action 都需要 Authorize Attr,为什么没有一个属性只使用那些不需要的?

c# - 无法将 lambda 表达式转换为类型 'string',因为它不是委托(delegate)类型

.net - 我需要处理这个 Image 实例吗?

java - 为什么 Java 中的一些资源没有被垃圾回收,必须关闭或自动关闭?

c# 我的析构函数没有被调用?