c# - GC.Collect() 和 GC.Collect(GC.MaxGeneration) 有什么区别?

标签 c# .net garbage-collection

我看到了多个建议运行 GC.Collect(GC.MaxGeneration) 的答案。
既然方法GC.Collect()会收集所有存在的分代,那么两者有什么区别吗?

也许如果只有两代而不是三代,GC 将收集两代,而不会尝试收集第三代,这将提高性能。但说真的,这有意义吗?

最佳答案

唯一的区别是 GC.Collect() 将使用 GCCollectionMode.Optimized但是 GC.Collect(GC.MaxGeneration) 将使用 GCCollectionMode.Default(至少在 .NET Framework 4.5 中)。在重载中,您也可以手动指定收集模式。

/// <summary>Specifies the behavior for a forced garbage collection.</summary>
public enum GCCollectionMode
{
    /// <summary>The default setting for this enumeration, which is currently <see cref="F:System.GCCollectionMode.Forced" />. </summary>
    Default,
    /// <summary>Forces the garbage collection to occur immediately.</summary>
    Forced,
    /// <summary>Allows the garbage collector to determine whether the current time is optimal to reclaim objects. </summary>
    Optimized
}

关于c# - GC.Collect() 和 GC.Collect(GC.MaxGeneration) 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15876691/

相关文章:

c# - 使用 Div Click 事件作为 UpdatePanel 的触发器

c# - 帮助修复 C# "A ref or out argument must be an assignable"中的错误

c# - 如何同时为 .Net 3.5 和 4 编译项目

c# - 为什么这个 C# 转换示例不起作用?

Java G1GC 从不收集 Old Gen

c# - 简单文本的正则表达式模式

c# - 旋转 PDF 页面内容而不是实际页面

.net - EXE 压缩(对于 .NET 应用程序)算法以二进制代码显示带有真实人名的奇怪字符

.net - WeakReference.Target GC 后 WeakReference 会发生什么

java - 如何分析JVM垃圾收集?