GCSettings.LargeObjectHeapCompactionMode 属性

定义

获取或设置指示完全阻止垃圾回收是否压缩大型对象堆 (LOH) 的值。

public static System.Runtime.GCLargeObjectHeapCompactionMode LargeObjectHeapCompactionMode { get; [System.Security.SecurityCritical] set; }
public static System.Runtime.GCLargeObjectHeapCompactionMode LargeObjectHeapCompactionMode { get; set; }

属性值

指示完全阻止垃圾回收是否压缩 LOH 的枚举值之一。

属性

注解

LOH 用于为需要超过 85,000 字节的大型对象(例如数组) )分配内存 (。 由于复制大型内存块的性能影响,垃圾回收器通常会扫描 LOH,这涉及到创建死对象占用的内存位置列表,这些位置可以重复使用以满足将来为大型对象分配内存的请求。 但是,在广泛使用 LOH 来存储暂时性对象的应用中,内存碎片也可能对性能产生负面影响。 在这种情况下,可以使用 LargeObjectHeapCompactionMode 属性来压缩,而不是在垃圾回收过程中简单地扫描 LOH。

属性的 LargeObjectHeapCompactionMode 默认值为 GCLargeObjectHeapCompactionMode.Default,指示在垃圾回收期间未压缩 LOH。 如果将属性赋值 GCLargeObjectHeapCompactionMode.CompactOnce为 ,则 LOH 将在下一次完全阻止垃圾回收期间压缩,并将属性值重置为 GCLargeObjectHeapCompactionMode.Default

备注

后台垃圾回收不会阻止。 这意味着,如果将 属性设置为 LargeObjectHeapCompactionModeGCLargeObjectHeapCompactionMode.CompactOnce,则随后发生的任何后台第 2 代集合都不会压缩 LOH。 只有第一个阻塞第 2 代集合会压缩 LOH。

LargeObjectHeapCompactionMode 属性设置为 GCLargeObjectHeapCompactionMode.CompactOnce后,下一个完全阻塞垃圾回收 (和压缩 LOH) 在不确定的未来时间发生。 可以使用如下所示的代码立即压缩 LOH:

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另请参阅