Ich habe also einfach diese Bell-Klasse, die ich Garbage Collection testen:
%Vor%Wenn ich dieses Code-Segment unten ausführe, wird kein Müll gesammelt
%Vor%Wenn ich aber nur reference.IsAlive wie unten überprüfe, ist es Müll gesammelt
%Vor% Können Sie mir erklären, wie das funktioniert?Sie versuchen, es mit dem Debug-Modus zu testen. GC ist im Debug-Modus nicht aggressiv, da es sich im Freigabemodus verhält (bei aktiviertem Optimierungsschalter). Dies macht das Debuggen einfach, sonst werden Sie beim Debuggen seltsame Dinge finden. Zum Beispiel: Sie können versuchen, den Wert der bereits vergeudeten Variablen zu überprüfen.
Führe den Code im Freigabemodus aus und du kannst sehen, dass Bell
GC'd wird.
Das liegt an Ihrem Objekttyp von reference
( Quelle )
Repräsentiert eine schwache Referenz, die auf ein Objekt im Standbild verweist Zulassen, dass dieses Objekt von der Garbage Collection zurückgewonnen wird.
Und folgendes könnte wahrscheinlich erklären, warum sich zwei Szenarien unterschiedlich verhalten ( Source )
Eine schwache Referenz ermöglicht es dem Garbage Collector, das Objekt zu erfassen, während die Anwendung weiterhin auf das Objekt zugreifen kann. Eine schwache Referenz ist nur während der unbestimmten Zeitspanne gültig, bis das Objekt erfasst wird, wenn keine starken Referenzen existieren. Wenn Sie eine schwache Referenz verwenden, kann die Anwendung dennoch eine starke Referenz auf das Objekt erhalten, die verhindert, dass es gesammelt wird. Es besteht jedoch immer das Risiko, dass der Garbage Collector erst zu dem Objekt gelangt, bevor eine starke Referenz wiederhergestellt wird.
Nach mehreren Läufen [mit einigen Testfällen]: meine Meinung
Das if-else
ist der Schlüssel, denke ich. Nach Writeline
wird das Objekt erneut referenziert, um eine starke Referenz zu erhalten, bevor GC
das Objekt bereinigt.
Wieder ist dieser Satz der Schlüssel
Es besteht jedoch immer das Risiko, dass der Garbage Collector erst zu dem Objekt gelangt, bevor eine starke Referenz wiederhergestellt wird.
Tags und Links c# garbage-collection