如何证明弱引用已发布?

Sha*_*ane 5 c# garbage-collection

我正在尝试测试一些使用的代码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();
Run Code Online (Sandbox Code Playgroud)

但目标不是null两种情况.也试过多次调用GC.Collect,但它似乎没有任何区别.

Ben*_*all 0

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

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

另外,使用通用版本WeakReference<T>. 非通用 API 使用中存在的问题在通用 API 中得到了解决。请参阅:http ://www.philosophicalgeek.com/2014/08/14/prefer-weakreferencet-to-weakreference/

编辑:没有刷新,注意到帖子已经旧了,评论已经涵盖了这一点。