[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
你有一个字符串的引用, 因为它是一个常数,所以 可能实习(即不是动态的) 分配),永远不会 收集。
就是这样。将第一行更改为
var wr = new WeakReference(new object());
并且测试通过: - )
答案 0 :(得分:16)
我可以想到两个可能的原因: