配置.NET垃圾收集
为了获得良好的性能,以正确的方式为silo进程配置.NET垃圾回收,就非常重要。我们发现的最佳设置组合是,设置gcServer = true和gcConcurrent = true。这些很容易通过应用程序csproj文件设置。见下面的例子:
.NET Framework和.NET Core
// .csproj
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>
旧.csproj项目格式的.NET Framework
// App.config
<configuration>
<runtime>
<gcServer enabled="true"/>
<gcConcurrent enabled="true"/>
</runtime>
</configuration>
但是,如果silo作为Azure工作者角色的一部分运行,而默认情况下,该角色被配置为使用工作站GC,这就不那么容易了。此博客文章介绍了如何为Azure工作者角色设置相同的配置 - https://blogs.msdn.microsoft.com/cclayton/2014/06/05/server-garbage-collection-mode-in-microsoft-azure/
重要的提示
服务器垃圾回收仅在多处理器计算机上可用。因此,即使您通过应用程序csproj文件或通过如上引用的博客文章中的脚本,来配置垃圾收集,如果silo运行在具有单核的(虚拟)计算机上,您将无法从gcServer=true
获益。