不使用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/