See*_*eeR 5 .net c# memory-leaks
[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
}
Run Code Online (Sandbox Code Playgroud)
它是.NET 3.5 SP1
任何人都可以告诉我为什么这个测试失败了?
编辑:谢谢stusmith
你有一个字符串的引用,因为它是一个常量,可能是实例(即没有动态分配),永远不会被收集.
就是这样.将第一行更改为
var wr = new WeakReference(new object());
Run Code Online (Sandbox Code Playgroud)
并且测试通过:-)
stu*_*ith 16
我可以想到两个可能的原因: