Bra*_*ann 2 .net c# garbage-collection destructor finalizer
我有以下代码:
public class A
{
~A()
{
Console.WriteLine("destructor");
}
}
public static A Aref;
static void Main(string[] args)
{
Aref = new A();
int gen = GC.GetGeneration(Aref);
Aref = null;
GC.Collect(gen, GCCollectionMode.Forced);
Console.WriteLine("GC done");
}
Run Code Online (Sandbox Code Playgroud)
我以为我会在调用GC.Collect时调用Finalizer方法,但实际情况并非如此.
谁能解释我为什么?
在您的示例中,在集合期间不会调用终结器,因为它仍然由可终结队列生根.但是它计划完成,这意味着它将在下一次垃圾收集期间收集.
如果你想确保收集带有终结器的类型实例,你需要做两个这样的集合.
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Run Code Online (Sandbox Code Playgroud)
但通常你不应该Collect()自己调用这个方法.