12

我正在调整我们的服务器的性能,并尝试指定以下配置,以及设置GCLatencyModeLowLatency.

<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
  <gcServer enabled="true"/>
  <gcConcurrent enabled="false"/>
</runtime>

这给了我性能提升,我非常高兴,直到一位同事指出这两种设置在 .Net 4 中是互斥的。

那么这将解决什么配置?当然,GCSettings.IsServerGC返回 true,并且从设置gcConcurrent为 false 可以获得非常可衡量的性能增益。

(我将要分析的代码编译到测试工具中,因此虽然它通常是由 IIS 托管的服务器,但我所有的时间都在控制台应用程序上)

4

2 回答 2

7

我在这里找到了你的答案: 延迟模式

默认垃圾收集模式


如果未指定 LatencyMode 属性,则默认模式是并发工作站垃圾回收。该模式取决于两个运行时配置设置的值:

<gc并发>

如果启用,此设置指定公共语言运行时在单独的线程上运行工作站垃圾收集以支持并发操作。默认情况下启用此设置。

<gc服务器>

如果启用,此设置指定公共语言运行时运行服务器垃圾收集;否则,它将运行工作站垃圾收集。您只能在具有两个或更多处理器的计算机上启用服务器垃圾收集。默认情况下未启用。如果启用此设置,gcConcurrent将自动禁用。

GCLatencyMode的默认值如下:

启用gcConcurrent并禁用gcServer时交互。

禁用 gcConcurrent 或启用 gcServer的批处理。

因此,当 gcServer 启用时,gcConcurrent 会自动禁用。无需将 gcConcurrent 设置为禁用。GCLatencymode 以批处理模式运行,这说明了性能的提高。

于 2015-06-03T15:48:54.590 回答
2

如果现在有任何帮助,gcConcurrent 设置可与 .NET 4.5 中的后台 GC 互换使用。以下MSDN 博客介绍了 .NET 4.5 中可用的设置。您可以一起使用所有设置,它们可用于工作站和服务器 GC。

虽然 SustainedLowLatency 设置生效,但仍会发生第 0 代、第 1 代和后台第 2 代收集,并且通常不会导致明显的暂停时间。只有当机器内存不足或应用程序通过调用 GC.Collect() 引发 GC 时,才会发生阻塞第 2 代收集。

还,

在 .NET Framework 4.5 中,SustainedLowLatency 模式可用于工作站和服务器 GC。要打开它,请将 GCSettings.LatencyMode 属性设置为 GCLatencyMode.SustainedLowLatency。.NET Framework 4 包括用于工作站 GC 的 LowLatency 模式;但是,此设置仅适用于短时间,而 SustainedLowLatency 模式适用于更长时间。

于 2015-01-20T06:30:26.273 回答