我知道,由于某些版本的StreamWriter停止了对终结器的支持,但在源代码中,我看到它调用了GC.SuppressFinalize(this)。为什么叫它?我认为它实际上只适用于有终结器的对象。
更新
我想知道如果对象没有终结器,GC.SuppressFinalize()是否有某种效果?
发布于 2020-12-21 11:04:41
它是处置模式的一部分。
Microsoft描述了如下所示的处置模式:
public void Dispose()
{
// Dispose of unmanaged resources.
Dispose(true);
// Suppress finalization.
GC.SuppressFinalize(this);
}引用链接:
Dispose方法执行所有对象清理,因此垃圾收集器不再需要调用对象的Object.Finalize覆盖。因此,对SuppressFinalize方法的调用阻止垃圾收集器运行终结器。如果类型没有终结器,则对GC.SuppressFinalize的调用无效。注意,实际的清理是由Dispose(bool)方法重载执行的。
编辑:进一步看,关于干燥,我想StreamWriter.Close()只是打电话给StreamWrite.Dispose()。此外,StreamWriter.Close()似乎是多余的,因为基类TextWriter.Close()具有相同的内容!(这个应该直接调用TextWrite.Dispose()。但这只是MHO。)
https://stackoverflow.com/questions/65391589
复制相似问题