小编Tec*_*one的帖子

垃圾收集应该已经删除了对象,但WeakReference.IsAlive仍然返回true

我有一个我希望通过的测试,但垃圾收集器的行为并不像我假设的那样:

[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
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,obj对象应该是GC'd,因此我希望该WeakReference.IsAlive属性返回false.

似乎因为obj变量声明的范围与GC.Collect未收集的变量相同.如果我在方法之外移动obj声明和初始化,则测试通过.

有没有人对此行为有任何技术参考文档或解释?

.net c# garbage-collection weak-references

13
推荐指数
2
解决办法
3709
查看次数

标签 统计

.net ×1

c# ×1

garbage-collection ×1

weak-references ×1