Die Garbage Collection sollte das Objekt entfernt haben, aber WeakReference.IsAlive gibt weiterhin true zurück
Ich habe einen Test, von dem ich erwartet habe, dass er bestanden wird, aber das Verhalten des Garbage Collector ist nicht so, wie ich angenommen habe:
[Test]
public void WeakReferenceTest2()
{
var obj = new object();
var wRef = new WeakReference(obj);
wRef.IsAlive.Should().BeTrue(); //passes
GC.Collect();
wRef.IsAlive.Should().BeTrue(); //passes
obj = null;
GC.Collect();
wRef.IsAlive.Should().BeFalse(); //fails
}
In diesem Beispiel ist dieobj
Objekt sollte GC'd sein und daher würde ich das erwartenWeakReference.IsAlive
Eigentum zurückzugebenfalse
.
Es scheint, dass weil dieobj
Variable wurde im selben Gültigkeitsbereich wie die deklariertGC.Collect
es wird nicht gesammelt. Wenn ich die obj-Deklaration und -Initialisierung außerhalb der Methode bewege, besteht der Test.
Hat jemand eine technische Referenzdokumentation oder Erklärung für dieses Verhalten?