System.gc() 对比 GC.Collect()

System.gc() vs GC.Collect()

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

第一行。

Forces an immediate garbage collection from generation 0 through a specified generation.

和另一行。

Use this method to try to reclaim memory that is inaccessible.

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

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

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

或者只是像 Java 中的建议?

这不是关于 "I want to force a GC in C#" 的问题,我只是想知道它是如何工作的。

是的。 GC.collect() 确保垃圾回收。但这不是一个好的做法。

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

GC.Collect() 立即强制 GC。您的线程将被阻塞,直到 GC 完成。

关于 "try to reclaim memory" 部分 - 如果对象实现了 Finalize 方法,则终结器必须 运行 才能回收内存。垃圾收集器会将终结器调度到 运行,对象将至少保留到内存中直到下一次 GC。