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

时间:2015-03-18 10:48:43

标签: 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");
            }

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

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

我的问题是什么?我误解了WeakReferences吗?

1 个答案:

答案 0 :(得分:4)

您的代码是正确的。编译为Release并在没有调试器的情况下运行(Shift + F5)或直接从命令提示符运行。有关解释,请参阅Does garbage collection run during debug?