我写了这段代码:
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吗?
答案 0 :(得分:4)
您的代码是正确的。编译为Release并在没有调试器的情况下运行(Shift + F5)或直接从命令提示符运行。有关解释,请参阅Does garbage collection run during debug?