在 .net core 项目中在 Linux 上运行时设置 GCServer = True

Roe*_*sim 2 .net c# linux garbage-collection .net-core

如何在 .net core 项目中将 GCServer 设置为 true?通常在 .net 框架项目中,我添加一个 App.Config xml 文件,该文件将 GCServer 变量设置为 true,但这在 Linux 上运行的 .net 核心项目中不起作用(App.Config 文件已生成并发布,但变量仍然没有) t 变化)

Oma*_*jid 5

添加<ServerGarbageCollection>True</ServerGarbageCollection>到您的 csproj 文件。喜欢:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    ...
    <ServerGarbageCollection>true</ServerGarbageCollection>
    ...
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

要确认在构建期间正确设置了它,请检查<PROJECT>.runtimeconfig.json目录中的bin文件。它应该包含以下内容:

"configProperties": {
  "System.GC.Server": true
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,GCServer 已经是默认的。您可以使用以下命令检查 msbuild 文件是否有默认值msbuild /pp

$ dotnet msbuild /pp | grep -i ServerGarbage
<ServerGarbageCollection>true</ServerGarbageCollection>
<RuntimeHostConfigurationOption Include="System.GC.Server" Condition="'$(ServerGarbageCollection)' != ''" Value="$(ServerGarbageCollection)" />
Run Code Online (Sandbox Code Playgroud)

如果您有一个带有 的 csproj 文件Sdk="Microsoft.NET.Sdk.Web",那么它已经是默认值:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
</Project>

$ dotnet msbuild /pp | grep -i ServerGarbage
<ServerGarbageCollection>true</ServerGarbageCollection>
<RuntimeHostConfigurationOption Include="System.GC.Server" Condition="'$(ServerGarbageCollection)' != ''" Value="$(ServerGarbageCollection)" />
Run Code Online (Sandbox Code Playgroud)