我写了这段代码:
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)。结果是: 是的,第一次 是的,第二次
我的问题是什么?..我是否误解了弱引用?
你的代码是正确的。编译为 Release 并在没有调试器 (Shift+F5) 的情况下运行或直接从命令提示符运行。有关说明,请参阅调试期间垃圾收集是否运行?