使用gcServer ="true"为.NET设置垃圾收集器的经验

lsa*_*mon 25 .net asp.net performance garbage-collection

是否有人使用Aspnet.config为多处理器计算机优化了垃圾收集器的配置:

<gcServer enabled="true"/>
<gcConcurrent enabled="true"/>
Run Code Online (Sandbox Code Playgroud)

您网站的效果是否有所改善?
是否注意到任何问题?

Ree*_*sey 20

首先,Concurrent和Server是互斥的选项.有关服务器GC误解的一些详细信息,请参阅此博客文章.但是,ASP.NET默认承载服务器GC(参见Scott Hanselman的讨论),因此没有区别.

我建议坚持使用服务器而不是并发ASP.NET网站.对于用户模式应用程序,并发GC一直是用户响应,因为服务器gc将导致"挂起".

我使用过服务器GC,并注意到某些情况下的重大改进.

但是,服务器模式GC确实可以帮助用户应用程序,如果您的用户应用程序正在使用大量内存池,并且变得高度分散.

  • 这在4.5中有所改变,它引入了**服务器并发GC**:http://msdn.microsoft.com/en-us/library/ms229357.aspx (10认同)

Abe*_*bel 5

(非常老的问题,我知道,但我还是想添加这个)

Server GC 和 Concurrent GC 之间有一个主要区别:Server GC 每个处理器有一个线程,在进行收集时会挂起该处理器上的线程,而 Server Concurrent GC 线程与其他线程并行运行,即没有挂起。请参阅这篇 MSDN 文章以获取更多信息和更细微的差异。

根据一个周期所需的时间,这可能会对应用程序的用户响应能力产生相当大的影响,因此请明智地选择。对于没有 UI 的 ASP.NET,服务器 GC 是更好的(也是默认的)选项。