WeakReference Bug?

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

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

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