c#:为什么 GC 无法在我的代码中收集 Weakreference 的目标?
c# : why GC can't collect Weakreference's target in my code?
我写了这段代码:
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 的 target(joe)。
结果是:
是的,第一次
是的,第二次
我的问题是什么?..我是否误解了 WeakReferences?
您的代码是正确的。在没有调试器 (Shift+F5) 的情况下或直接从命令提示符编译为 Release 和 运行。有关解释,请参阅 Does garbage collection run during debug?
我写了这段代码:
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 的 target(joe)。 结果是: 是的,第一次 是的,第二次
我的问题是什么?..我是否误解了 WeakReferences?
您的代码是正确的。在没有调试器 (Shift+F5) 的情况下或直接从命令提示符编译为 Release 和 运行。有关解释,请参阅 Does garbage collection run during debug?