【问题标题】:Setting GCServer = True when running on Linux in .net core project在 .net core 项目中的 Linux 上运行时设置 GCServer = True
【发布时间】:2018-09-26 19:56:48
【问题描述】:

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

【问题讨论】:

  • 可以在csproj中使用<ServerGarbageCollection>True</ServerGarbageCollection>属性。但在 dotnetcore 中,默认情况下它已经是真的了
  • 如果是这样,为什么 GCSettings.IsServerGC 返回 false?
  • 嗯,在我的应用程序中确实如此。您可以在/bin/debug/MyProject.runtimeconfig.json 中查看真实值。有关更多详细信息,请参阅 asp 社区站立的此视频youtu.be/…
  • 我也在 Linux 上,我可以在我的身上看到同样的问题。 .runtimeconfig.json 不包含 System.GG.ServerGCSettings.IsServerGC 也返回 false。
  • @Kalten 查看文档和一些本地快速测试,看起来<ServerGarbageCollection> 仅适用于 Web 项目 (Project Sdk="Microsoft.NET.Sdk.Web">) 的 True。否则需要显式设置。

标签: c# .net linux .net-core garbage-collection


【解决方案1】:

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

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

要确认在构建过程中设置正确,请检查bin 目录中的&lt;PROJECT&gt;.runtimeconfig.json 文件。它应该包含以下内容:

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

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

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

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

<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)" />

【讨论】:

  • 好的,所以我尝试了你的建议,它似乎只适用于 .net 核心项目,即我将 &lt;ServerGarbageCollection&gt;true&lt;/ServerGarbageCollection&gt; 添加到 csproj 文件并更改了 GC,但似乎在 .net 框架中添加标志的项目不会更改任何内容,唯一的方法是添加 App.config 文件
  • 嗨,我可以确认一下,如果有一些项目是 web 项目 (Sdk="Microsoft.NET.Sdk.Web") 所依赖的,是所有项目都明确标记为 GC 模式还是只标记为 web项目?
猜你喜欢
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多