WeakRefence的目标没有清理

时间:2018-02-20 08:29:27

标签: c# garbage-collection weak-references

我正准备参加MS考试Programming in C# ExamRef 70-483并阅读同名书籍。有关于使用WeakReference和以下示例的章节:

using System;
using System.Drawing;

class Program
{
    static WeakReference data;

    static void Main()
    {
        object result = GetData();
        GC.Collect();
        result = GetData();
    }

    private static object GetData()
    {
        if (data == null)
        {
            data = new WeakReference(LoadLargeData());
        }
        if (data.Target == null)
        {
            data.Target = LoadLargeData();
        }
        return data.Target;
    }

    private static object LoadLargeData()
    {
        return new Bitmap(20000, 20000);
    }
}

我所做的唯一改变是LoadLargeData()实施,在书中有LoadLargeList()没有实施。

问题是,在调用GC.Collect()后,我的data.Target永远不会null。如何强制GC真正收集此WeakReference数据?

1 个答案:

答案 0 :(得分:0)

正如评论中提到的 Evk 一样,在没有调试器附件的情况下在发布模式下运行应用程序是正确的答案,而不是垃圾收集按预期工作。