[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
}
这是 .NET 3.5 SP1 版本。
有人能告诉我为什么这个测试失败吗?
编辑:谢谢 stusmith。
你引用了一个字符串, 因为它是一个常量,所以很可能已经被interned(即不是动态分配的),并且永远不会被收集。
就是这样。将第一行更改为
var wr = new WeakReference(new object());
测试通过 :-)