首页 > 解决方案 > 如何证明弱引用已释放?

问题描述

我正在尝试测试一些使用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,但似乎没有任何区别。

标签: c#garbage-collection

解决方案


在发布版本(启用优化)中运行代码并在不调试的情况下启动,垃圾收集器很好地展示了预期的行为。

调试器会将您的变量作为 GC 根保留在范围内,以防您需要检查它们。

另外,使用通用版本,WeakReference<T>. 非泛型的 API 使用问题已在泛型中解决。见:http ://www.philosophicalgeek.com/2014/08/14/prefer-weakreferencet-to-weakreference/

编辑:没有刷新并且通知帖子是旧的并且评论已经涵盖了这一点。


推荐阅读