我写了这个代码:
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的目标(joe)。结果是:是的,第一次是,第二次
我的问题是什么?。。我误解了WeakReferences吗?
您的代码是正确的。编译为Release,不使用调试器(Shift+F5)或直接从命令提示符运行。有关解释,请参阅垃圾收集是否在调试期间运行?