[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
谁能告诉我为什么这个测试失败?
Edit: 谢谢斯图史密斯
你有一个字符串的引用,
因为它是一个常数,所以是
可能实习(即不是动态的
分配),并且永远不会被分配
集。
就是这样。将第一行更改为
var wr = new WeakReference(new object());
并且测试通过了:-)
我可以立即想到两个可能的原因:
- 您正在调试中运行。调试中的引用比发布中的引用持续时间更长,并且可能比您想象的还要长。
- 您有一个对字符串的引用,由于它是一个常量,因此可能会被保留(即不是动态分配的),并且永远不会被收集。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)