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()); 

并且测试通过:-)

我可以想到两个可能的原因:

  1. 你在调试中运行。 调试中的引用持续时间比发布时间长,可能比您想象的要长。
  2. 你有一个字符串的引用,因为它是一个常量,可能是实例(即没有动态分配),永远不会被收集。