【发布时间】:2013-09-29 13:25:09
【问题描述】:
正如问题所述,我只是想知道,因为有人问过我,但我不知道,这有什么原因吗?
【问题讨论】:
标签: c# .net garbage-collection dispose idisposable
正如问题所述,我只是想知道,因为有人问过我,但我不知道,这有什么原因吗?
【问题讨论】:
标签: c# .net garbage-collection dispose idisposable
当一个类没有定义终结器(析构函数)时,对该类has no effect 的实例调用SuppressFinalize()。
当您看到它时,它通常是完整的 Disposable 实现的遗留物。只需删除它或忽略它。
【讨论】:
GC.SuppressFinalize() 等价于GC.KeepAlive()。因此,它不仅会禁止类自己的终结器运行,而且会确保它持有引用的任何对象的终结器在处置完成之前不会被调度执行。如果对象在没有处置的情况下被放弃,它不会防止终结器“提前”运行,但会在对象被正确处置的情况下防止其拥有的对象过早终结。
GC.SuppressFinalize(X) 的执行路径,代码将需要保留对 X 的引用,以便将其传递给该方法(这意味着对象 X 必须继续存在直到那时)。
原因可能是为了防止以后有人添加终结器并忘记添加 GC.SuppressFinalize() 时出现潜在错误。
【讨论】: