我有一个我希望通过的测试,但垃圾收集器的行为并不像我想象的那样:
[Test]
public void WeakReferenceTest2()
{
var obj = new object();
var wRef = new WeakReference(obj);
wRef.IsAlive.Should().BeTrue(); //passes
GC.Collect();
wRef.IsAlive.Should().BeTrue(); //passes
obj = null;
GC.Collect();
wRef.IsAlive.Should().BeFalse(); //fails
}
在此示例中,obj
对象应该是 GC'd,因此我希望该WeakReference.IsAlive
属性返回false
。
似乎因为该变量被声明在与它没有被收集obj
的相同范围内。GC.Collect
如果我将 obj 声明和初始化移到测试通过的方法之外。
是否有人对此行为有任何技术参考文档或解释?