WeakReference Bug?
[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());
并且测试通过:-)
我可以想到两个可能的原因:
- 你在调试中运行。 调试中的引用持续时间比发布时间长,可能比您想象的要长。
- 你有一个字符串的引用,因为它是一个常量,可能是实例(即没有动态分配),永远不会被收集。