GC .Net4中的GC:一起指定gcServer和gcConcurrent

时间:2013-11-15 10:13:02

标签: c# .net .net-4.0 garbage-collection

我正在调整服务器的性能,并尝试指定以下配置,并将GCLatencyMode设置为LowLatency

<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托管的服务器,但我的所有时间都在控制台应用程序上)

2 个答案:

答案 0 :(得分:7)

我在这里找到了你的答案: Latency Modes

  

默认垃圾收集模式

           

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

     

<强>&LT; gcConcurrent&GT;

     

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

     

<强>&LT; gcServer&GT;

     

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

     

GCLatencyMode 的默认值如下:

     

启用 gcConcurrent 并禁用 gcServer 时进行互动。

     

禁用 gcConcurrent ,或启用 gcServer 时批处理。

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

答案 1 :(得分:2)

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

  

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

此外,

  

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