我正准备参加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
数据?
答案 0 :(得分:0)
正如评论中提到的 Evk 一样,在没有调试器附件的情况下在发布模式下运行应用程序是正确的答案,而不是垃圾收集按预期工作。