WeakReference Bug?

时间:2008-10-16 12:41:25

标签: c# .net 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
}

它是.NET 3.5 SP1
任何人都可以告诉我为什么这个测试失败了吗?

修改:谢谢stusmith

  

你有一个字符串的引用,   因为它是一个常数,所以   可能实习(即不是动态的)   分配),永远不会   收集。

就是这样。将第一行更改为

var wr = new WeakReference(new object());

并且测试通过: - )

1 个答案:

答案 0 :(得分:16)

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

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