Garbage Collection - Einer funktioniert, aber nicht der andere, wie kommt es? [Duplikat]

8

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?

    
Christian M.P. 12.02.2015, 09:02
quelle

2 Antworten

6

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.

    
Sriram Sakthivel 12.02.2015 09:12
quelle
2

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.

    
Kavindu Dodanduwa 12.02.2015 09:09
quelle

Tags und Links