【问题标题】:Experience using gcServer="true" to set garbage collector for .NET使用 gcServer="true" 为 .NET 设置垃圾收集器的经验
【发布时间】:2010-10-22 02:52:04
【问题描述】:

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

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

您的网站性能有改善吗?
有没有发现问题?

【问题讨论】:

  • here 或许你会得到答案

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


【解决方案1】:

首先,并发和服务器是互斥的选项。有关服务器 GC 误解的一些详细信息,请参阅 this blog post。但是,默认情况下,ASP.NET 托管服务器 GC(请参阅Scott Hanselman's discussion),因此不会有任何区别。

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

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

但是,如果您的用户应用程序正在处理巨大的内存池并且变得高度碎片化,那么服务器模式 GC 确实可以帮助用户应用程序。

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多