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

29

有人使用过启用了多处理器优化垃圾回收机制的配置,使用Aspnet.config吗?

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

你的网站的性能有改进吗?
注意到了任何问题吗?


请查看这里,可能会得到答案。 - Pankaj Rawat
3个回答

25

首先,Concurrent和Server是互斥的选项。有关服务器GC误解的详细信息,请参见此博客文章。然而,默认情况下,ASP.NET主机使用服务器GC(请参见Scott Hanselman的讨论),因此在那里不会有任何区别。

我建议在ASP.NET网站中坚持使用服务器GC而不是并发GC。对于用户模式应用程序,采用并行GC可以提高用户响应速度,但服务器GC会导致“挂起”现象。

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

然而,如果您的用户应用程序正在使用巨大的内存池并且存在高度分段,则服务器模式GC确实有助于用户应用程序。


11
4.5版本中引入了服务器并发GC,这将会有所变化:http://msdn.microsoft.com/en-us/library/ms229357.aspx - skolima
1
@skolima 是的 - 不过,你只需将其保留为“服务器”,它就会自动使用新的并发服务器 GC。 - Reed Copsey

5

(虽然这是一个很老的问题,但我还是想加上这个答案)

Server GC和Concurrent GC之间有一个主要的区别:Server GC对应每个处理器一个线程,并在进行垃圾回收时暂停该处理器上的线程,而服务器Concurrent GC线程与其他线程并行运行,即不暂停。更多细微的差异请参见此MSDN文章

根据一个循环所需的时间,这可能会对应用程序的用户响应能力产生相当大的影响,因此选择时需要明智。在ASP.NET的情况下,没有UI,Server GC是更好(默认)的选项。


2
简单来说,工作站GC模式可以提高单个用户的性能,而服务器GC模式则适用于经常有多个请求的程序。我真诚地希望这个问题不是一个更大问题的症状。有时候人们开始质疑垃圾回收器是因为他们没有看到他们所期望的内存占用。不要指望通过使用不同的垃圾回收器获得巨大的收益。在我做的几乎所有测试中,使用哪种垃圾回收器都没有太大的区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接