垃圾收集成功似乎取决于不相关的事情

时间:2015-12-21 15:28:16

标签: c# .net garbage-collection weak-references

为了编写与弱引用相关的单元测试,我试图始终强制对象被垃圾收集。 但是,GC.Collect()I expect to force garbage collection,似乎并不一致。 请考虑以下示例代码。

static void Main (string [] args)
{
    var obj = new object ();
    var wRef = new WeakReference (obj);

    obj = null;
    GC.Collect ();
    Console.WriteLine (wRef.IsAlive); // Prints false.
    Console.ReadKey ();
}

在上面的代码中,似乎收集了对象,而在下面的代码中并非如此,尽管代码实际上是相同的。

static void Main (string [] args)
{
    var obj = new object ();
    var wRef = new WeakReference (obj);

    obj = null;
    GC.Collect ();
    bool alive = wRef.IsAlive ? true : false;
    Console.WriteLine (alive); // Prints true
    Console.ReadKey ();
}

有人可以解释这种行为差异,并说明我们如何可靠地让对象被回收以便用弱引用进行一些测试?

更新

在没有附加调试器的情况下在发布模式下运行第二个代码段时(即在Visual Studio外部),它会输出False。

0 个答案:

没有答案