c#:为什么GC无法在我的代码中收集Weakreference的目标?

0 c# weak-references

我写了这段代码:

            dog joe = new dog();
            WeakReference wr = new WeakReference(joe);
            if (wr.IsAlive)
            {
                Console.WriteLine("Yes,first time");
            }
            else
            {
                Console.WriteLine("No,first time");
            }

            GC.Collect();

            if (wr.IsAlive)
            {
                Console.WriteLine("Yes,second time");
            }
            else
            {
                Console.WriteLine("No,second time");
            }
Run Code Online (Sandbox Code Playgroud)

我期望得到这样的结果: 是的,第一次 否,第二次

但似乎 GC 没有收集我的 WeakReference 的目标(joe)。结果是: 是的,第一次 是的,第二次

我的问题是什么?..我是否误解了弱引用?

xan*_*tos 5

你的代码是正确的。编译为 Release 并在没有调试器 (Shift+F5) 的情况下运行或直接从命令提示符运行。有关说明,请参阅调试期间垃圾收集是否运行?

  • 或者在调试中运行时将 joe 设置为 null。 (2认同)