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

时间:2009-04-27 17:08:16

标签: .net asp.net performance garbage-collection

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

<gcServer enabled="true"/>
<gcConcurrent enabled="true"/>

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

3 个答案:

答案 0 :(得分:20)

首先,Concurrent和Server是互斥选项。有关服务器GC误解的一些详细信息,请参阅this blog post。但是,ASP.NET默认承载服务器GC(请参阅Scott Hanselman's discussion),因此没有区别。

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

我使用过服务器GC,并注意到在某些情况下有显着改善。

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

答案 1 :(得分:3)

(非常古老的问题,我知道,但无论如何我想加上这个)

Server GC和Concurrent GC之间有一个主要区别:Server GC每个处理器有一个线程,并在进行收集时挂起该处理器上的线程,服务器Concurrent GC线程与其他线程并行运行,即没有悬挂。请参阅this MSDN article for more info以及更微妙的差异。

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

答案 2 :(得分:2)

简单地说,Workstation GC模式可以提高单个用户的性能,而服务器GC模式则设计用于一直有多个请求的程序。我真的希望这个问题不是一个更大问题的症状。有时当人们开始质疑垃圾收集器时,因为他们没有看到他们期望的内存占用。不要期望与不同的垃圾收集器有很大的收获。在我所做的几乎所有测试中,你使用的收集器几乎没有什么区别。