我对C#中的GC有疑问。根据这个主题:C#: should object variables be assigned to null?
垃圾收集器将收集一个变量,此后在代码中不再使用它。但是,如果我使用以下代码对其进行测试,则GC收集器仅在将变量设置为null时才收集该变量。 (注释掉了一行)(如果没有设置为null它是活着的 - > true,如果它被设置为null它不活着 - > false)我在这里缺少什么?
Coffee coff = new Coffee();
coff.name = "test";
coff.number = 4;
WeakReference test = new WeakReference(coff);
//coff = null;
GC.Collect();
GC.WaitForPendingFinalizers();
Console.WriteLine(test.IsAlive.ToString());
Coffee class包含以下内容:
public class Coffee
{
public string name { get; set; }
public string beans { get; set; }
public int number { get; set; }
}
@Edit 14:56 27-08-2014:
我找到了答案://stackoverflow.com/questions/17130382/understanding-garbage-collection-in-net。它与以下设置有关。我Qoute:
"由于您使用的是调试器,因此您在这里被绊倒并得出了非常错误的结论。您需要按照在用户计算机上运行的方式运行代码。首先使用Build + Configuration manager切换到Release版本,更改" Active解决方案配置"左上角的组合到"发布"。接下来,进入工具+选项,调试,常规并取消勾选"抑制JIT优化" 。选择"