当前位置: 首页 > 编程语言 > C#

我们应该使用“工作站”垃圾回收还是“服务器”垃圾回收?分享

时间:2023-04-10 10:58:25 C#

我们应该使用“工作站”垃圾收集还是“服务器”垃圾收集?我有一个在多核4路服务器上运行的大型多线程C#应用程序。目前我们正在使用“服务器模式”垃圾收集。但测试表明工作站模式GC更快。MSDN说:使用服务器API的托管代码应用程序通过使用服务器优化的垃圾收集器(GC)而不是默认的工作站GC获得了显着的好处。Workstation是默认的GC模式,也是单处理器机器上唯一可用的模式。工作站GC托管在控制台和Windows窗体应用程序中。它与正在运行的程序同时执行完整(第2代)收集,从而最大限度地减少延迟。此模式对于感知性能通常比原始吞吐量更重要的客户端应用程序很有用。服务器GC仅在多处理器机器上可用。它为每个处理器创建一个单独的托管堆和线程,并并行执行集合。在收集期间,所有托管线程都被挂起(运行本机代码的线程仅在本机调用返回时才被挂起)。通过这种方式,服务器GC模式最大化吞吐量(每秒请求数)并随着处理器数量的增加而提高性能。具有四个或更多处理器的计算机的性能尤其出色。但是我们没有看到性能闪耀!!!!有没有人有什么建议?它没有很好地解释,但据我所知,服务器模式是每个内核同步的,而工作站模式是异步的。换句话说,工作站模式适用于少量需要性能一致的长时间运行的应用程序。垃圾收集试图“四处走动”,但事实证明它的平均效率较低。服务器模式适用于每个“作业”相对较短且由单个内核处理的应用程序(编辑:想想多线程Web服务器)。这个想法是每个“作业”都获得所有的CPU能力,并快速完成,但有时核心会停止处理请求并清理内存。因此在这种情况下,GC预计平均效率更高,但内核在运行时不可用,因此应用程序需要能够适应这一点。在你的情况下,这听起来像是,因为你有一个线程相对耦合的应用程序,你在第一个模式中比在第二个模式中更适合模型。但这只是事后的想法。衡量你系统的性能(正如ammoQ所说,不是你的GC性能,而是你的应用程序如何执行),并使用你衡量的最佳方法。.NET4.5引入了并发服务器垃圾回收。http://msdn.microsoft.com/en-us/library/ee787088.aspx指定指定(这是默认值所以可以省略)还有新的SustainedLowLatencyMode;在.NETFramework4.5中,SustainedLowLatency模式可用于工作站和服务器GC。要打开它,请将GCSettings.LatencyMode属性设置为GCLatencyMode.SustainedLowLatency。服务器:您的程序是机器上唯一重要的应用程序,需要尽可能低的GC延迟。工作站:您拥有UI或与其他重要进程共享计算机C#学习教程就是这样:我们应该使用“工作站”垃圾回收还是“服务器”垃圾回收?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: