【问题标题】:Should we use "workstation" garbage collection or "server" garbage collection?我们应该使用“工作站”垃圾收集还是“服务器”垃圾收集?
【发布时间】:2010-12-15 00:02:12
【问题描述】:

我有一个大型多线程 C# 应用程序在多核 4 路服务器上运行。目前我们正在使用“服务器模式”垃圾收集。但是测试表明,工作站模式 GC 更快。

MSDN says:

使用服务器 API 的托管代码应用程序从使用服务器优化的垃圾收集器 (GC) 而非默认工作站 GC 获得显着优势。

工作站是默认的 GC 模式,也是单处理器计算机上唯一可用的模式。 Workstation GC 托管在控制台和 Windows 窗体应用程序中。它与正在运行的程序同时执行完整(第 2 代)收集,从而最大限度地减少延迟。此模式对于客户端应用程序很有用,在这些应用程序中,感知性能通常比原始吞吐量更重要。

服务器 GC 仅在多处理器计算机上可用。它为每个处理器创建一个单独的托管堆和线程,并并行执行集合。在收集期间,所有托管线程都被暂停(运行本机代码的线程仅在本机调用返回时才暂停)。这样,服务器 GC 模式可以最大化吞吐量(每秒的请求数),并随着处理器数量的增加而提高性能。性能在配备四个或更多处理器的计算机上尤为突出。

但我们没有看到性能大放异彩!!!!有人有什么建议吗?

【问题讨论】:

  • DanC.这是我第一次听说 GC 模式。您可以发布任何指向相关 MSDN 页面的链接吗?
  • 你期待什么样的表演?您的程序是基于 Windows GUI 的还是某种 Web 服务?
  • 这里的 MSDN 上也有一些东西:msdn.microsoft.com/en-us/library/bb680014.aspx
  • 我的应用程序是在多核 4 路服务器上运行的大型多线程 C# 应用程序。所以它既不是 UI 也不是网络服务......!

标签: c# .net garbage-collection


【解决方案1】:

服务器:您的程序是机器上唯一重要的应用程序,需要尽可能低的 GC 延迟。

工作站:您有一个 UI 或与其他重要进程共享机器

【讨论】:

    【解决方案2】:

    .NET 4.5 引入了并发服务器垃圾回收。

    http://msdn.microsoft.com/en-us/library/ee787088.aspx

    specify <gcServer enabled="true"/> 
    specify <gcConcurrent enabled="true"/> (this is the default so can be omitted)
    

    还有新的 SustainedLowLatencyMode;

    在 .NET Framework 4.5 中,SustainedLowLatency 模式可用于工作站和服务器 GC。要打开它,请将 GCSettings.LatencyMode 属性设置为 GCLatencyMode.SustainedLowLatency。

    【讨论】:

    • 实际上,它引入了后台服务器垃圾回收,因为后台GC取代了服务器和客户端的并发GC。
    • @I3arnon 哪种模式背景效果更好?我将我的应用程序设置为服务器模式,它取得了巨大的提升
    • GC 服务器启用是在 .net 4.5 的默认背景下对吗?
    • @MonsterMMORPG "从 .NET Framework 4.5 开始,后台服务器垃圾回收是服务器垃圾回收的默认模式" msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx
    【解决方案3】:

    解释得不是很好,但据我所知,服务器模式是每个内核同步的,而工作站模式是异步的。

    换句话说,工作站模式适用于少数需要一致性能的长时间运行的应用程序。垃圾收集尝试“不碍事”,但结果是平均效率较低。

    服务器模式适用于每个“作业”相对较短且由单个内核处理的应用程序(编辑:想想多线程 Web 服务器)。这个想法是每个“工作”都获得所有的 cpu 能力,并很快完成,但有时核心会停止处理请求并清理内存。所以在这种情况下,希望 GC 平均效率更高,但核心在运行时不可用,因此应用程序需要能够适应这种情况。

    在您的情况下,这听起来像,因为您有一个线程相对耦合的应用程序,您更适合第一种模式而不是第二种模式所期望的模型。

    但这只是事后证明。衡量您的系统性能(正如 ammoQ 所说,不是您的 GC 性能,而是您的应用程序的表现)并使用您衡量的最佳指标。

    【讨论】:

    • 也许值得补充一点,“服务器”对于不同的人来说通常意味着不同的东西。您可能会认为“服务器”的意思是“我的新的昂贵的多核机器”,而 MS 可能会认为“服务器”的意思是“计算机同时用于许多不同的、不相关的任务”。这是两个有效但完全正交的定义。
    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2011-01-21
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2013-04-01
    相关资源
    最近更新 更多