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。
在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。