在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”的问题,我只是想知道它是如何工作的。
答案 0 :(得分:3)
GC.Collect()
立即强制GC。在GC完成之前,您的线程将被阻止。
关于“尝试回收内存”部分 - 如果对象实现了Finalize方法,则必须在回收内存之前运行终结器。垃圾收集器将安排终结器运行,并且该对象将保留在内存中,至少到下一个GC。
答案 1 :(得分:2)
是的。 GC.collect()确保垃圾收集。但这不是一个好习惯。