Ich habe den folgenden Code bekommt:Warum wird mein .net-Destruktor in diesem sehr einfachen Szenario nicht aufgerufen?
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");
}
Ich dachte, meine Finalizer-Methode auf meinen Aufruf an GC.Collect genannt werden würde, was nicht der Fall ist.
Kann mir jemand erklären warum?
Warum ist die zweit benötigt sammeln? – Mark13426
Sammeln aller Objekte, die für die Ausführung ihrer Finalizer geeignet sind. Der a-Typ hat einen Finalizer, die Instanzen werden von der Finalizer-Warteschlange gerootet, bis der Finalizer ausgeführt oder unterdrückt wurde. –