[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
谁能告诉我为什么这个测试失败了?
编辑:谢谢斯图史密斯
您有一个对字符串的引用,因为它是一个常量,所以它可能是被保留的(即不是动态分配的),并且永远不会被收集。
就是这样。将第一行更改为
var wr = new WeakReference(new object());
并且测试通过了:-)