我试图弄清楚 c# 中的 GC/终结器是如何工作的,所以我编写了以下程序。但是在 ReadKey 之后,终结器被调用了 36193 次。我认为它应该在程序完成并且 AppDomain 正在卸载时只调用一次。我在这里缺少什么,这是如何工作的?
private class GCAnalyzer
{
private static int count = 0;
~GCAnalyzer()
{
if (!AppDomain.CurrentDomain.IsFinalizingForUnload())
{
count++;
GC.ReRegisterForFinalize(this);
Console.WriteLine("GC " + count);
}
}
}
static void Main(string[] a)
{
new GCAnalyzer();
Console.ReadKey();
}