[TestMethod] public void Memory() { var wr = new WeakReference('aaabbb'); Assert.IsTrue(wr.IsAlive); GC.Collect(); GC.Collect(); GC.Collect(); GC.Collect(); GC.Collect(); Assert.IsFalse(wr.IsAlive); //<-- fails here }
It’s .NET 3.5 SP1
Can anyone can tell me why this test fails?
Edit: Thanks stusmith
You have a reference to a string, which since it is a constant, is probably interned (ie not dynamically allocated), and will never be collected.
That was it. Changed first line to
var wr = new WeakReference(new object());
and the test passes 🙂
I can think of two possible reasons off the top of my head: