System.gc()vs GC.Collect()

时间:2015-10-03 18:16:42

标签: java c# garbage-collection

在Java中,我们可以使用方法System.gc()建议 GC。 今天我从this link了解了C#中的方法GC.Collect()。  但这个解释对我来说有点不清楚。

第一行。

  

强制从第0代到第0代立即进行垃圾收集   指定的一代。

另一条线。

  

使用此方法尝试回收无法访问的内存。

在我的简单测试代码中,GC.Collect()会立即生效。

Console.WriteLine("abcdefg");
GC.Collect(2);
GC.Collect(2);
Console.WriteLine(GC.GetGeneration("abcdefg"));

GC.Collect()总是立即强制GC?

或只是像Java一样的建议?

这不是关于“我想在C#中强制使用GC”的问题,我只是想知道它是如何工作的。

2 个答案:

答案 0 :(得分:3)

GC.Collect()立即强制GC。在GC完成之前,您的线程将被阻止。

关于“尝试回收内存”部分 - 如果对象实现了Finalize方法,则必须在回收内存之前运行终结器。垃圾收集器将安排终结器运行,并且该对象将保留在内存中,至少到下一个GC。

答案 1 :(得分:2)

是的。 GC.collect()确保垃圾收集。但这不是一个好习惯。

参考:Best Practice for Forcing Garbage Collection in C#