gpt4 book ai didi

c# - 如何证明释放了弱引用?

转载 作者:太空狗 更新时间:2023-10-29 23:49:17 26 4
gpt4 key购买 nike

我正在尝试测试一些使用 WeakReference 的代码 - 如何强制收集引用对象,以便 reference.Target 返回 null?

我试过了

WeakReference reference = new WeakReference(null);
{
reference.Target = new object();
}

Console.WriteLine(reference.Target);

GC.Collect();
Thread.Sleep(1000);

Console.WriteLine(reference.Target);

Console.ReadLine();

但在这两种情况下目标都不是null。还尝试多次调用 GC.Collect,但似乎没有任何区别。

最佳答案

如果对弱引用的目标不感兴趣,而只是想知道它是否已经死亡,最好检查 IsAlive 属性是否已变为 false 而不是检查 Target 属性是否已变为 null。虽然这可能无法解决调试构建使对象存活时间比预期更长的所有问题,但它将避免可能出现的其他一些问题,尤其是在使用并发垃圾回收时。 WeakReference 的目标在任何强引用存在时无法被收集,因此获取 WeakReferenceTarget 至少会暂时保护该对象反对被收集的问题。在某些情况下,这可能是不可避免的,因为代码实际上想要对相关引用执行某些操作,但如果只是想知道对象何时消亡,则没有理由冒着延长对象生命周期的风险。

关于c# - 如何证明释放了弱引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51149498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com