用于垃圾回收的运行时配置选项

反馈

本文内容

  1. 指定配置的方法
  2. 垃圾回收的风格
  3. 管理资源使用情况
  4. 大型页面

显示另外 4 个

此页面包含有关 .NET 运行时垃圾回收器 (GC) 设置的信息。 如果你要尝试让正在运行的应用达到最佳性能,请考虑使用这些设置。 然而,在特定情况下,默认值为大多数应用程序提供最佳性能。

设置在此页上被排入组中。 每个组内的设置通常彼此结合使用以实现特定的结果。

 备注

  • 只有当 GC 初始化时(通常意味着在进程启动期间),运行时才会读取这些配置。 如果在进程已运行时更改环境变量,则更改不会反映在该进程中。 此页面省略了可在运行时通过 API 更改的设置(例如延迟级别)。
  • 由于 GC 是按进程进行的,因此在计算机级别设置这些配置几乎没有意义。 例如,你不希望计算机上的每个 .NET 进程都使用服务器 GC 或相同的堆硬限制。
  • 对于数值,请对 runtimeconfig.json 或 runtimeconfig.template.json 文件中的设置使用十进制表示法,而对环境变量设置使用十六进制表示法。 对于十六进制值,可以使用或不使用“0x”前缀来指定它们。
  • 如果使用环境变量,则 .NET 6 及更高版本将标准化前缀 DOTNET_,而不是 COMPlus_。 但是,COMPlus_ 前缀仍将继续正常工作。 如果使用的是早期版本的 .NET 运行时,则仍应该使用 COMPlus_ 前缀,例如 COMPlus_gcServer

指定配置的方法

对于不同版本的 .NET 运行时,可采用不同的方法来指定配置值。 下表显示了相关摘要。

展开表

配置位置此位置适用的 .NET 版本格式解释方式
runtimeconfig.json 文件/
runtimeconfig.template.json 文件
.NET (Core)nn 解释为十进制值。
环境变量.NET Framework、.NET (Core)0xn 或 nn 被解释为任一格式的十六进制值
app.config 文件.NET Framework0xnn 被解释为十六进制值1

1 可以为 app.config 文件设置指定不带 0x 前缀的值,但不建议这样做。 在 .NET Framework 4.8+ 上,由于出现了 bug,不带 0x 前缀的指定值被解释为十六进制值,但在以前的 .NET Framework 版本中,它被解释为十进制值。 若要避免更改配置,请在 app.config 文件中指定值时使用 0x 前缀。

例如,若要为名为“A.exe”的 .NET Framework 应用的 GCHeapCount 指定 12 个堆,请将下列 XML 添加到 A.exe.config 文件中。

XML复制

<?xml version="1.0" encoding="utf-8" ?>
<configuration>...<runtime><gcServer enabled="true"/><GCHeapCount>0xc</GCHeapCount></runtime>
</configuration>

对于 .NET (Core) 和 .NET Framework,可以使用环境变量。

在 Windows 上使用 .NET 6 或更高版本:

Windows 命令提示符复制

SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c

在 Windows 上使用 .NET 5 或更低版本:

Windows 命令提示符复制

SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c

在其他操作系统上:

对于 .NET 6 或更高版本:

Bash复制

export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c

对于 .NET 5 和更低版本:

Bash复制

export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c

如果不使用 .NET Framework,则还可以在 runtimeconfig.json 或 runtimeconfig.template.json 文件中设置值。

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.Server": true,"System.GC.HeapCount": 12}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.Server": true,"System.GC.HeapCount": 12}
}

垃圾回收的风格

垃圾回收的两种主要风格是工作站 GC 和服务器 GC。 有关两者之间的差异的详细信息,请参阅工作站和服务器垃圾回收。

垃圾回收的次要风格是后台垃圾回收和非并发垃圾回收。

使用以下设置,选择垃圾回收的风格:

  • 工作站与服务器 GC
  • 后台垃圾回收

工作站与服务器

  • 配置应用程序是使用工作站垃圾回收还是服务器垃圾回收。
  • 默认:工作站垃圾回收。 它等效于将值设置为 false

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.Serverfalse - 工作站
true - 服务器
.NET Core 1.0
MSBuild 属性ServerGarbageCollectionfalse - 工作站
true - 服务器
.NET Core 1.0
环境变量COMPlus_gcServer0 - 工作站
1 - 服务器
.NET Core 1.0
环境变量DOTNET_gcServer0 - 工作站
1 - 服务器
.NET 6
.NET Framework 的 app.configGCServerfalse - 工作站
true - 服务器
示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.Server": true}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.Server": true}
}

项目文件:

XML复制

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><ServerGarbageCollection>true</ServerGarbageCollection></PropertyGroup></Project>

后台垃圾回收

  • 配置是否启用后台(并发)垃圾回收。
  • 默认:使用后台垃圾回收。 它等效于将值设置为 true
  • 有关详细信息,请参阅后台垃圾回收。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.Concurrenttrue - 后台 GC
false - 非并发 GC
.NET Core 1.0
MSBuild 属性ConcurrentGarbageCollectiontrue - 后台 GC
false - 非并发 GC
.NET Core 1.0
环境变量COMPlus_gcConcurrent1 - 后台 GC
0 - 非并发 GC
.NET Core 1.0
环境变量DOTNET_gcConcurrent1 - 后台 GC
0 - 非并发 GC
.NET 6
.NET Framework 的 app.configgcConcurrenttrue - 后台 GC
false - 非并发 GC
示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.Concurrent": false}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.Concurrent": false}
}

项目文件:

XML复制

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><ConcurrentGarbageCollection>false</ConcurrentGarbageCollection></PropertyGroup></Project>

管理资源使用情况

使用以下设置来管理垃圾回收器的内存和处理器使用情况:

  • 关联
  • 关联掩码
  • 关联范围
  • CPU 组
  • 堆计数
  • 堆限制
  • 堆限制百分比
  • 高内存百分比
  • 每对象堆限制
  • 每对象堆限制百分比
  • 保留 VM

有关其中某些设置的详细信息,请参阅 Middle ground between workstation and server GC(服务器和工作站 GC 之间的中间地带)博客条目。

堆计数

  • 限制通过垃圾回收器创建的堆数。
  • 仅适用于服务器垃圾回收。
  • 如果启用了默认的 GC 处理器关联,堆计数设置会将 n 个 GC 堆/线程关联到前 n 个处理器。 (使用关联掩码或关联范围设置可精确指定要关联的处理器。)
  • 如果禁用了 GC 处理器关联,则此设置会限制 GC 堆的数量。
  • 有关详细信息,请参阅 GCHeapCount 备注。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapCount十进制值.NET Core 3.0
环境变量COMPlus_GCHeapCount十六进制值.NET Core 3.0
环境变量DOTNET_GCHeapCount十六进制值.NET 6
.NET Framework 的 app.configGCHeapCount十进制值.NET Framework 4.6.2

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.HeapCount": 16}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.HeapCount": 16}
}

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,若要将堆数限制为 16,则该值对于 JSON 文件为 16,对于环境变量则为 0x10 或 10。

关联掩码

  • 指定垃圾回收器线程应使用的确切处理器数。
  • 如果禁用了 GC 处理器关联,则忽略此设置。
  • 仅适用于服务器垃圾回收。
  • 该值是一个位掩码,用于定义可用于该进程的处理器。 例如,十进制值 1023 或十六进制值 0x3FF 或 3FF(如果使用环境变量)在二进制记数法中为 0011 1111 1111。 这指定将使用前 10 个处理器。 若要指定接下来使用的 10 个处理器(即处理器 10-19),请指定一个十进制值 1047552(或十六进制值 0xFFC00 或 FFC00),它等效于二进制值 1111 1111 1100 0000 0000。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapAffinitizeMask十进制值.NET Core 3.0
环境变量COMPlus_GCHeapAffinitizeMask十六进制值.NET Core 3.0
环境变量DOTNET_GCHeapAffinitizeMask十六进制值.NET 6
.NET Framework 的 app.configGCHeapAffinitizeMask十进制值.NET Framework 4.6.2

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.HeapAffinitizeMask": 1023}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.HeapAffinitizeMask": 1023}
}

关联范围

  • 指定用于垃圾回收器线程的处理器列表。
  • 此设置与 System.GC.HeapAffinitizeMask 类似,只是它允许你指定超过 64 个的处理器。
  • 对于 Windows 操作系统,请为处理器编号或范围加上相应的 CPU 组作为前缀,例如“0:1-10,0:12,1:50-52,1:7”。 如果实际上没有超过 1 个 CPU 组,则无法使用此设置。 必须使用关联掩码设置。 指定的数字在该组中,这意味着不能 >= 64。
  • 对于不存在 CPU 组概念的 Linux 操作系统,可以使用此设置和关联掩码设置来指定相同的范围。 不是指定“0:1-10”,而是指定“1-10”,因为不需要指定组索引。
  • 如果禁用了 GC 处理器关联,则忽略此设置。
  • 仅适用于服务器垃圾回收。
  • 有关详细信息,请参阅 Maoni Stephens 的博客文章:在 64 个以上 CPU 的计算机上为 GC 改善 CPU 配置。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapAffinitizeRanges以逗号分隔的处理器编号列表或处理器编号范围。
Unix 示例:“1-10,12,50-52,70”
Windows 示例:“0:1-10,0:12,1:50-52,1:7”
.NET Core 3.0
环境变量COMPlus_GCHeapAffinitizeRanges以逗号分隔的处理器编号列表或处理器编号范围。
Unix 示例:“1-10,12,50-52,70”
Windows 示例:“0:1-10,0:12,1:50-52,1:7”
.NET Core 3.0
环境变量DOTNET_GCHeapAffinitizeRanges以逗号分隔的处理器编号列表或处理器编号范围。
Unix 示例:“1-10,12,50-52,70”
Windows 示例:“0:1-10,0:12,1:50-52,1:7”
.NET 6

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:70"}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:70"}
}

CPU 组

  • 配置垃圾回收器是否使用 CPU 组。

    当 64 位 Windows 计算机具有多个 CPU 组(即,有超过 64 个处理器)时,通过启用此元素,可跨所有 CPU 组扩展垃圾回收。 垃圾回收器使用所有核心来创建和平衡堆。

     备注

    这是仅限 Windows 的概念。 在较旧的 Windows 版本中,Windows 将进程限制为一个 CPU 组。 因此,GC 仅使用一个 CPU 组,除非使用此设置来启用多个 CPU 组。 Windows 11 和 Server 2022 中取消了此 OS 限制。 此外,从 .NET 7 开始,GC 默认在 Windows 11 或 Server 2022 上运行时使用所有 CPU 组。

  • 仅适用于 64 位 Windows 操作系统上的服务器垃圾回收。

  • 默认:垃圾回收不会跨 CPU 组扩展。 它等效于将值设置为 0

  • 有关详细信息,请参阅 Maoni Stephens 的博客文章:在 64 个以上 CPU 的计算机上为 GC 改善 CPU 配置。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.CpuGroupfalse - 禁用
true - 启用
.NET 5
环境变量COMPlus_GCCpuGroup0 - 禁用
1 - 启用
.NET Core 1.0
环境变量DOTNET_GCCpuGroup0 - 禁用
1 - 启用
.NET 6
.NET Framework 的 app.configGCCpuGroupfalse - 禁用
true - 启用

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

 备注

若要配置公共语言运行时 (CLR),使其也在所有 CPU 组之间分配线程池中的线程,请启用 Thread_UseAllCpuGroups 元素选项。 对于 .NET Core 应用,可以通过将 DOTNET_Thread_UseAllCpuGroups 环境变量的值设置为 1 以启用此选项。

关联

  • 指定是否将垃圾回收线程与处理器关联。 若要关联一个 GC 线程,则意味着它只能在其特定的 CPU 上运行。 为每个 GC 线程创建一个堆。
  • 仅适用于服务器垃圾回收。
  • 默认:将垃圾回收线程与处理器关联。 它等效于将值设置为 false

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.NoAffinitizefalse - 关联
true - 不关联
.NET Core 3.0
环境变量COMPlus_GCNoAffinitize0 - 关联
1 - 不关联
.NET Core 3.0
环境变量DOTNET_GCNoAffinitize0 - 关联
1 - 不关联
.NET 6
.NET Framework 的 app.configGCNoAffinitizefalse - 关联
true - 不关联
.NET Framework 4.6.2

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.NoAffinitize": true}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.NoAffinitize": true}
}

堆限制

  • 指定 GC 堆和 GC 簿记的最大提交大小(以字节为单位)。

  • 此设置仅适用于 64 位计算机。

  • 如果已配置每对象堆限制,则忽略此设置。

  • 默认值(仅在某些情况下适用)是 20 MB 或容器内存限制的 75%(以较大者为准)。 此默认值在以下情况下适用:

    • 进程正在具有指定内存限制的容器中运行。
    • HeapHardLimitPercent 未设置。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimit十进制值.NET Core 3.0
环境变量COMPlus_GCHeapHardLimit十六进制值.NET Core 3.0
环境变量DOTNET_GCHeapHardLimit十六进制值.NET 6

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.HeapHardLimit": 209715200}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.HeapHardLimit": 209715200}
}

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,若要将堆硬限制指定为 200 个兆字节 (MiB),则该值对于 JSON 文件为 209715200,对于环境变量则为 0xC800000 或 C800000。

堆限制百分比

  • 指定允许的 GC 堆使用量占总物理内存的百分比。

  • 如果还设置了 System.GC.heaphdlimit,则忽略此设置。

  • 此设置仅适用于 64 位计算机。

  • 如果进程正在具有指定内存限制的容器中运行,则百分比的计算结果将为该内存限制的百分比。

  • 如果已配置每对象堆限制,则忽略此设置。

  • 默认值(仅在某些情况下适用)是 20 MB 或容器内存限制的 75%(以较大者为准)。 此默认值在以下情况下适用:

    • 进程正在具有指定内存限制的容器中运行。
    • System.GC.HeapHardLimit 未设置。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitPercent十进制值.NET Core 3.0
环境变量COMPlus_GCHeapHardLimitPercent十六进制值.NET Core 3.0
环境变量DOTNET_GCHeapHardLimitPercent十六进制值.NET 6

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.HeapHardLimitPercent": 30}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.HeapHardLimitPercent": 30}
}

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,若要将堆使用率限制为 30%,则该值对于 JSON 文件为 30,对于环境变量则为 0x1E 或 1E。

每对象堆限制

可以根据每个对象堆指定 GC 的允许堆使用量。 不同的堆包括大型对象堆 (LOH)、小型对象堆 (SOH) 和固定对象堆 (POH)。

  • 如果为任何 DOTNET_GCHeapHardLimitSOHDOTNET_GCHeapHardLimitLOH 或 DOTNET_GCHeapHardLimitPOH 设置指定值,则还必须为 DOTNET_GCHeapHardLimitSOH 和 DOTNET_GCHeapHardLimitLOH 指定值。 否则,运行时将无法初始化。
  • DOTNET_GCHeapHardLimitPOH 的默认值为 0。 DOTNET_GCHeapHardLimitSOH 和 DOTNET_GCHeapHardLimitLOH 没有默认值。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitSOH十进制值.NET 5
环境变量COMPlus_GCHeapHardLimitSOH十六进制值.NET 5
环境变量DOTNET_GCHeapHardLimitSOH十六进制值.NET 6

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitLOH十进制值.NET 5
环境变量COMPlus_GCHeapHardLimitLOH十六进制值.NET 5
环境变量DOTNET_GCHeapHardLimitLOH十六进制值.NET 6

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitPOH十进制值.NET 5
环境变量COMPlus_GCHeapHardLimitPOH十六进制值.NET 5
环境变量DOTNET_GCHeapHardLimitPOH十六进制值.NET 6

这些配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,若要将堆硬限制指定为 200 个兆字节 (MiB),则该值对于 JSON 文件为 209715200,对于环境变量则为 0xC800000 或 C800000。

每对象堆限制百分比

可以根据每个对象堆指定 GC 的允许堆使用量。 不同的堆包括大型对象堆 (LOH)、小型对象堆 (SOH) 和固定对象堆 (POH)。

  • 如果为任何 DOTNET_GCHeapHardLimitSOHPercentDOTNET_GCHeapHardLimitLOHPercent 或 DOTNET_GCHeapHardLimitPOHPercent 设置指定值,则还必须为 DOTNET_GCHeapHardLimitSOHPercent 和 DOTNET_GCHeapHardLimitLOHPercent 指定值。 否则,运行时将无法初始化。
  • 如果指定了 DOTNET_GCHeapHardLimitSOHDOTNET_GCHeapHardLimitLOH 和 DOTNET_GCHeapHardLimitPOH,则忽略这些设置。
  • 值为 1 表示 GC 使用该对象堆的总物理内存的 1%。
  • 每个值都必须大于 0 并小于 100。 此外,3 个百分比值的总和必须小于 100。 否则,运行时将无法初始化。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitSOHPercent十进制值.NET 5
环境变量COMPlus_GCHeapHardLimitSOHPercent十六进制值.NET 5
环境变量DOTNET_GCHeapHardLimitSOHPercent十六进制值.NET 6

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitLOHPercent十进制值.NET 5
环境变量COMPlus_GCHeapHardLimitLOHPercent十六进制值.NET 5
环境变量DOTNET_GCHeapHardLimitLOHPercent十六进制值.NET 6

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HeapHardLimitPOHPercent十进制值.NET 5
环境变量COMPlus_GCHeapHardLimitPOHPercent十六进制值.NET 5
环境变量DOTNET_GCHeapHardLimitPOHPercent十六进制值.NET 6

这些配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,若要将堆使用率限制为 30%,则该值对于 JSON 文件为 30,对于环境变量则为 0x1E 或 1E。

高内存百分比

内存负载由正在使用的物理内存的百分比表示。 默认情况下,当物理内存负载达到 90%时,垃圾回收对于执行完整的压缩垃圾回收变得更加积极,以避免分页。 当内存负载低于 90% 时,GC 优先使用后台回收进行完整的垃圾回收,这种方法的暂停时间较短,但不会使堆的总大小减少太多。 在具有大量内存(80 GB 或更多)的计算机上,默认负载阈值介于 90% 到 97% 之间。

可以通过 DOTNET_GCHighMemPercent 环境变量或 System.GC.HighMemoryPercent JSON 配置设置来调整高内存负载阈值。 如果要控制堆大小,请考虑调整阈值。 例如,对于具有 64 GB 内存的计算机上的主要进程,当有 10% 的可用内存时,GC 开始响应是合理的。 但是对于较小的进程(例如,仅消耗 1GB 内存的进程),GC 可以在可用内存少于 10% 的情况下轻松地运行。 对于这些较小的进程,请考虑将阈值设置得更高。 另一方面,如果你希望较大的进程具有较小的堆大小(即使有足够的物理内存可用),要使 GC 更快做出反应以缩小堆大小,则降低此阈值是一种有效的方法。

 备注

对于在容器中运行的进程,GC 将根据容器限制考虑物理内存。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.HighMemoryPercent十进制值.NET 5
环境变量COMPlus_GCHighMemPercent十六进制值.NET Core 3.0
.NET Framework 4.7.2
环境变量DOTNET_GCHighMemPercent十六进制值.NET 6

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,要将高内存阈值设置为 75%,JSON 文件的值将为 75,而环境变量的值为 0x4B 或 4B。

保留 VM

  • 配置是将应删除的段置于备用列表上供将来使用,还是将其释放回操作系统 (OS)。
  • 默认:将段释放回操作系统。 它等效于将值设置为 false

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.RetainVMfalse - 释放到 OS
true - 置于备用列表上
.NET Core 1.0
MSBuild 属性RetainVMGarbageCollectionfalse - 释放到 OS
true - 置于备用列表上
.NET Core 1.0
环境变量COMPlus_GCRetainVM0 - 释放到 OS
1 - 置于备用列表上
.NET Core 1.0
环境变量DOTNET_GCRetainVM0 - 释放到 OS
1 - 置于备用列表上
.NET 6
示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.RetainVM": true}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.RetainVM": true}
}

项目文件:

XML复制

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><RetainVMGarbageCollection>true</RetainVMGarbageCollection></PropertyGroup></Project>

大型页面

  • 指定设置堆硬限制时是否应使用大型页面。
  • 默认:设置堆硬限制时不要使用大页面。 它等效于将值设置为 0
  • 这是一项实验性设置。

展开表

设置名引入的版本
runtimeconfig.json不可用不可用不可用
环境变量COMPlus_GCLargePages0 - 禁用
1 - 启用
.NET Core 3.0
环境变量DOTNET_GCLargePages0 - 禁用
1 - 启用
.NET 6

允许大型对象

  • 在 64 位平台上,为总大小大于 2 千兆字节 (GB) 的数组配置垃圾回收器支持。
  • 默认:垃圾回收支持大于 2 GB 的数组。 它等效于将值设置为 1
  • 在未来的 .NET 版本中,此选项可能会过时。

展开表

设置名引入的版本
runtimeconfig.json不可用不可用不可用
环境变量COMPlus_gcAllowVeryLargeObjects1 - 启用
0 - 禁用
.NET Core 1.0
环境变量DOTNET_gcAllowVeryLargeObjects1 - 启用
0 - 禁用
.NET 6
.NET Framework 的 app.configgcAllowVeryLargeObjects1 - 启用
0 - 禁用
.NET Framework 4.5

大型对象堆阈值

  • 指定导致对象进入大型对象堆 (LOH) 的阈值大小(以字节为单位)。
  • 默认阈值为 85,000 字节。
  • 指定的值必须大于默认阈值。
  • 该值可能由运行时限制为当前配置的最大可能大小。 可以通过 GC.GetConfigurationVariables() API 检查运行时使用的值。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.LOHThreshold十进制值.NET Core 1.0
环境变量COMPlus_GCLOHThreshold十六进制值.NET Core 1.0
环境变量DOTNET_GCLOHThreshold十六进制值.NET 6
.NET Framework 的 app.configGCLOHThreshold十进制值.NET Framework 4.8

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

示例

runtimeconfig.json 文件:

JSON复制

{"runtimeOptions": {"configProperties": {"System.GC.LOHThreshold": 120000}}
}

runtimeconfig.template.json 文件:

JSON复制

{"configProperties": {"System.GC.LOHThreshold": 120000}
}

 提示

如果要在 runtimeconfig.template.json 中设置该选项,请指定一个十进制值。 如果要将选项设置为一个环境变量,请指定一个十六进制值。 例如,若要将阙值大小设置为 120,000 个字节,则该值对于 JSON 文件为 120,000,对于环境变量则为 0x1D4C0 或 1D4C0。

独立 GC

  • 指定运行时加载的 GC 本机库名称,以代替默认的 GC 实现。 此本机库需要与 .NET 运行时位于同一目录中(在 Windows 上为 coreclr.dll,在 Linux 上为 libcoreclr.so)。

展开表

设置名引入的版本
runtimeconfig.json不可用不可用不可用
环境变量COMPlus_GCNamestring_path.NET Core 2.0
环境变量DOTNET_GCNamestring_path.NET 6

节省内存

  • 配置垃圾回收器来节省内存,但代价是垃圾回收更频繁,并且暂停时间可能更长。
  • 默认值为 0 - 这意味着没有更改。
  • 除了默认值 0 以外,介于 1 至 9(含)的值都有效。 值越高,垃圾回收器越会试图节省内存,进而使堆保持较小。
  • 如果值不为零,则将在大型对象堆具有太多碎片时自动压缩该堆。

展开表

设置名引入的版本
runtimeconfig.jsonSystem.GC.ConserveMemory0 - 9.NET 6
环境变量COMPlus_GCConserveMemory0 -9.NET Framework 4.8
环境变量DOTNET_GCConserveMemory0 -9.NET 6
.NET Framework 的 app.configGCConserveMemory0 -9.NET Framework 4.8

此配置设置没有特定的 MSBuild 属性。 但是,可以转而添加 MSBuild 项 RuntimeHostConfigurationOption。 将 runtimeconfig.json 设置名称用作 Include 特性的值。 如需示例,请参阅 MSBuild 属性。

app.config 文件示例:

XML复制


<configuration><runtime><GCConserveMemory enabled="5"/></runtime>
</configuration>

 提示

尝试不同的数字,看看哪个值最适合你。 从介于 5 至 7 之间的值开始。

 在 GitHub 上与我们协作

可以在 GitHub 上找到此内容的源,还可以在其中创建和查看问题和拉取请求。 有关详细信息,请参阅参与者指南。

.NET 反馈

.NET 是一个开放源代码项目。 选择一个链接以提供反馈:

 提出文档问题 提供产品反馈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/245075.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】C++ 算法458:可怜的小猪

作者推荐 视频算法专题 涉及知识点 动态规划 数学 力扣458:可怜的小猪 有 buckets 桶液体&#xff0c;其中 正好有一桶 含有毒药&#xff0c;其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药&#xff0c;你可以喂一些猪喝&#xff0c;通过观察猪是否…

精通 Spring REST API:最佳实践

概述 随着数字时代的推进&#xff0c;基于Web的程序已经成为构建交互式应用的关键。客户端与服务器之间的沟通频繁依赖于通过 APIs 获取的网络服务。 使用开源框架Spring&#xff0c;开发者可以有效率地搭建Web服务。本篇文章旨在展示如何利用Spring来构筑一个REST风格的Web服…

基于Java+SpringBoot+vue+element疫情物资捐赠分配系统设计和实现

基于JavaSpringBootvueelement疫情物资捐赠分配系统设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各种…

【字符串】【C++算法】828.统计子串中的唯一字符

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 子数组&#xff08;串&#xff09; 字符串 LeetCoce828.统计子串中的唯一字符 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符&#xff0c;并返回唯一字符的个数。 例…

【pyqt6】用pyqt做一个点菜小程序

用pyqt做一个点菜小程序 前言1.pyqt62. 功能介绍3.程序实现 前言 在本文中&#xff0c;我们将使用 PyQt6&#xff08;Python的GUI库&#xff09;创建一个简单的点菜小程序。该程序允许用户从菜单中选择菜品&#xff0c;将其添加到订单中&#xff0c;并通过点击“下单”按钮查看…

3.postman动态参数、文件上传及断言

一、postman内置动态参数以及自定义的动态参数 postman内置动态参数&#xff1a; {{$timestamp}} 生成当前时间的时间戳 {{$randomint}} 生成0-1000之间的随机数 {{$guid}} 生成随机guid字符串 自定义动态参数&#xff1a; 在请求中pre-req页面下 //手动的获得时间戳 var…

关于鸿蒙系统开源和技术细节的一些探讨

1月18日在深圳举办了“鸿蒙生态千帆启航仪式”&#xff0c;这也是华为鸿蒙开启生态进阶的信号。在政策的叠加下&#xff0c;鸿蒙未来必定是势不可挡的。我们这些程序员也得与时俱进&#xff0c;熟悉鸿蒙的技术和细节&#xff0c;别在经济寒冬里被淘汰了。 官方称 Harmony OS N…

1.24号c++

C绪论 c是c语言的扩充&#xff0c;C包含了C的所有属性&#xff0c;换一句话说&#xff0c;C语言在C中都合法。 C语言编程思想&#xff1a;面向过程 c编程思想&#xff1a;面向对象 可以说在C中一切皆对象。 c的三大属性&#xff1a;封装&#xff0c;继承&#xff0c;多态。…

VMWare扩展Ubuntu LVM卷

当我们在安装程序提示磁盘空间满了时&#xff0c;我们可以通过以下步骤进行空间扩展。 首先是调整虚拟机磁盘大小&#xff0c;注意这里关机后才可编辑 然后是使用df -hl命令&#xff0c;看磁盘占用情况&#xff0c;找到满载的分区 再是使用lsblk查看分区设备名&#xff0c;确定…

安达发|APS排产系统和SCM供应链管理之间的关系

APS排产系统和SCM供应链管理是现代企业管理中非常重要的两个环节&#xff0c;它们之间存在着密切的关系。本文将从以下几个方面来探讨APS排产系统和SCM供应链管理之间的关系。 1. 定义与功能 APS排产系统&#xff08;Advanced Planning and Scheduling System&#xff09;是一种…

加速应用开发:低代码云SaaS和源码交付模式如何选

随着数字化转型的加速&#xff0c;企业对于快速开发和交付高质量应用的需求也越来越迫切。为了满足这一需求&#xff0c;开发者们开始探索采用低代码平台进行软件开发工作&#xff0c;以加速应用开发过程。 目前&#xff0c;市场上的低代码产品众多&#xff0c;但基本可分为简单…

外包干了2个多月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

代理设计模式JDK动态代理CGLIB动态代理原理

代理设计模式 代理模式&#xff08;Proxy&#xff09;&#xff0c;为其它对象提供一种代理以控制对这个对象的访问。如下图 从上面的类图可以看出&#xff0c;通过代理模式&#xff0c;客户端访问接口时的实例实际上是Proxy对象&#xff0c;Proxy对象持有RealSubject的引用&am…

【2024】新建mysql数据库,如何选择字符集和排序规则

如何使用 Navicat 新建 MySQL 数据库&#xff0c;并选择字符集与排序规则 如何使用 Navicat 新建 MySQL 数据库并选择字符集与排序规则1. 开始之前2. 新建数据库步骤 1: 打开 Navicat步骤 2: 创建新数据库步骤 3: 填写数据库名称 常见的字符集和排序规则及其选择场景1. 字符集&…

有了NFC和蓝牙,为何还要UWB?什么时候UWB才是首推选择呢?

UWB UWB&#xff08;超宽带&#xff0c;Ultra-Wideband&#xff09;是一种短距离无线通信技术&#xff0c;它提供比当前使用的其他定位技术更精确的读数&#xff0c;使用飞行时间&#xff08;ToF&#xff09;和到达角&#xff08;AoA&#xff09;计算&#xff0c;UWB可以实时地…

jmeter分布式压测详解,建议收藏

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;薪资嘎嘎涨 一、什么是压力测试&#xff1f; 压力测试&#xff0…

SQL 注入总结(详细)

一、前言 这篇文章是最近学习 SQL 注入后的笔记&#xff0c;里面整理了 SQL 常见的注入方式&#xff0c;供大家学习了解 SQL 注入的原理及方法&#xff0c;也方便后续自己回顾&#xff0c;如有什么错误的地方欢迎指出&#xff01; 二、判断注入类型 按照注入点类型分类 数字型…

QT 实现自动生成小学两位数加减法算式

小学生加减法训练 QT实现–自动生成两位数加减法算式&#xff0c;并输出txt文件 可以copy到word文件&#xff0c;设置适当字体大小和行间距&#xff0c;带回家给娃做做题 void MainWindow::test(int answerMax, int count) {// 创建一个随机数生成器QRandomGenerator *gener…

AIGC:让生成式AI成为自己的外脑(文末送书)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;数据结构、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. 什么是AIGC?二. AIGC如何运作&#xff1f;2.1 步骤一&#xff1a;收集数据2.…

某顺cookie逆向

目标网站:aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 这个网站是对cookie进行反爬虫的&#xff0c;可以看到cookie中有一个加密参数v 二、分析参数 可以使用hook方法&#xff0c;来hook住cookie中v生成的位置&#xff0c;可以直接在控制台中输入hook函数 (function () {use strict;v…