私は、次のコードを持っている:私は私のファイナライザメソッドはそうではありませんGC.Collect、に私の呼び出し時に呼び出されるだろうと思ったこの単純なシナリオで、私の.netデストラクタが呼び出されないのはなぜですか?
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");
}
を。
誰でも私の理由を説明できますか?
はなぜ二収集が必要とされていますか? – Mark13426
ファイナライザを実行して適格となったオブジェクトを収集します。 a型にはファイナライザがあり、ファイナライザが実行されるか抑制されるまで、インスタンスはファイナライザキューによってルートされます。 –