【发布时间】:2012-03-10 00:17:12
【问题描述】:
给定以下使用 C# 的场景:
Someclass lInstance = new SomeClass();
System.WeakReference lWInstance = new System.WeakReference(lInstance);
lInstance = null;
System.GC.Collect();
System.GC.SuppressFinalize(lWInstance.Target);
想象一下,当 SuppressFinalize 执行时,GC 线程已经在 Someclass 的 Finalizer 代码中。
问题是会发生什么?我假设一旦 GC 线程进入 Finalizer 抑制它就没有效果了。
【问题讨论】:
-
你尝试的时候发生了什么?我猜有时终结器会被执行,有时不会。
-
System.GC.Collect() 不能保证做任何事情。它可能只是安排一个集合。我的猜测是,一旦开始完成,除非有一些额外的检查,否则它不会停止。
-
你为什么在乎?
SuppressFinalize应该是性能优化,仅此而已。
标签: c# .net garbage-collection