请考虑以下独立的C#代码段:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main()
{
var wr = new WeakReference(new object());
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, true, true);
Console.WriteLine(wr.IsAlive);
GC.KeepAlive((Action)(delegate { })); // ***
}
}
}
该项目针对使用Visual Studio 2017社区版本15.7.2构建的.NET Framework 4.6.1。 (使用默认的控制台应用程序模板。)
True
。False
。***
注释掉行时,结果始终是False
。False
。为什么GC不会收集弱引用的对象?我是否缺少某些东西,例如,在调试模式下会发生一些不寻常的事情?
注意: