配置 .NET 垃圾回收

为了获得良好的性能,必须以正确的方式为 silo 进程配置 .NET 垃圾回收。 基于团队的发现结果的最佳设置组合是设置 gcServer=truegcConcurrent=true。 可以在 C# 项目 (.csproj) 或 app.config 中配置这些值。有关详细信息,请参阅垃圾收集的风格

.NET Core 和 .NET 5+

针对完整 .NET Framework 编译的 SDK 样式项目不支持此方法

<PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
    <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>

.NET Framework

针对完整 .NET Framework 编译的 SDK 样式项目仍应使用此配置样式,请考虑示例 app.config XML 文件:

<configuration>
    <runtime>
        <gcServer enabled="true"/>
        <gcConcurrent enabled="true"/>
    </runtime>
</configuration>

但是,这在 silo 作为 Azure 辅助角色(默认情况下配置为使用工作站 GC)的一部分运行时并不容易。 有一篇相关的博客文章介绍了如何为 Azure 辅助角色设置相同的配置,请参阅 Azure 中的服务器垃圾回收模式

重要

服务器垃圾回收仅在多处理器计算机上可用。 因此,即使你通过应用程序 .csproj 文件或通过所引用博客文章中的脚本配置垃圾收集,但如果 silo 在单核(虚拟)计算机上运行,你也无法得到 gcServer=true 的好处。 有关详细信息,请参阅 GCSettings.IsServerGC 备注