为什么在没有Finalizer时使用GC.SuppressFinalize()?

Est*_*ban 2 .net c# garbage-collection dispose idisposable

正如问题所述,我只是想知道,因为我被问到并且我没有线索,这有什么理由吗?

Hen*_*man 6

当类没有定义Finalizer(析构函数)时,SuppressFinalize()对该类实例的调用无效.

当你看到它时,它通常是完整的Disposable实现的遗留.只需删除它或忽略它.

  • 如果一个类没有终结器,`GC.SuppressFinalize()`等同于`GC.KeepAlive()`.因此,它不仅会禁止类自己的终结器运行,而且*将确保它保存引用的任何对象的终结器不会被计划执行,直到处理完成为止*.如果物体在没有处置的情况下被抛弃,它将无法防止"早期"运行的终结器,但是在物体被妥善处理的情况下,它将防止其拥有的物体过早完成. (2认同)