我正在尝试将项目从 .NET Framework 4.7.2 迁移到 .NET 5,但我的程序的性能显着下降。该程序的部分内容利用并行性在具有 96 个内核和 192 个逻辑处理器(分布在 4 个 CPU 组中)的服务器上进行批量操作。
我在安装了 .NET 5 Runtime(未安装 .NET 5 SDK)的 Windows Server 2016 上运行该程序。该项目是用 F# 5.0 编写的。
在 .NET Framework 4.7.2 中,我们使用以下app.config文件成功地使程序在所有 192 个逻辑处理器上运行,实现了约 98% 的 CPU 利用率:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true" />
<GCCpuGroup enabled="true" />
<gcServer enabled="true" />
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
迁移到 .NET 5(以及扩展 .NET Core)后,CPU 利用率下降,并且我无法再次提高它。
根据微软自己的文档, app.config不用于配置.NET Core项目,而是用[appname].runtimeconfig.json. runtimeconfig.template.json为了适应这一变化,我在我的项目中添加了:
{
"configProperties": {
"System.GC.CpuGroup": …Run Code Online (Sandbox Code Playgroud)