65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 性能提示 – 了解你的垃圾回收选项

starIconstarIconstarIconstarIconstarIcon

5.00/5 (6投票s)

2018年7月15日

CPOL

2分钟阅读

viewsIcon

23996

一个未充分利用的设置,可以提供显著的性能提升

引言

一个未充分利用的设置,可以提供显著的性能提升。

工作站 GC - 这是 .NET 应用程序默认使用的垃圾回收方式,你可能不知道还有另一种选择。它使用较小的分段,这意味着更频繁的回收,而回收过程也更短,从而最大限度地减少应用程序线程的暂停。与并发 GC 配合使用时,它最适合桌面/GUI 应用程序。在禁用并发的情况下(所有线程都会暂停进行 GC),它使用的内存更少,最适合在单核机器上运行的轻量级服务,间歇性地处理任务(合适的用例很少)。 

还有另一种选择!

服务器 GC - 你应该尝试的那个 - 如果你有多个处理器专门用于你的应用程序,这可以真正加速 GC,并且通常也能加速内存分配。GC 在专用线程上并行进行(每个处理器/核心一个),由每个处理器的堆来促进。分段更大,有利于吞吐量,导致 GC 频率降低,但持续时间更长。这意味着更高的内存消耗。

我上面提到了并发 GC 设置(从 .NET4 开始,这被称为后台 GC)。从 .NET4.5 开始,它在服务器 GC 和工作站 GC 中默认启用。我不期望你会更改它,但了解它能带来什么好处是有益的 - 启用后,GC 会使用后台线程并发地标记(查找不可达对象)。这意味着在服务器 GC 模式下,每个逻辑处理器都有一个额外的线程,但这些线程优先级较低,不会与前台线程竞争。

将以下内容添加到你的 app.config 文件中以启用服务器 GC:<configuration> <runtime> <gcServer enabled="true"/> </runtime> </configuration> 如果你有充分的理由,你可以禁用后台 GC

<gcConcurrent enabled="false"/>

免责声明:与所有性能工作一样,在做出更改前后测量影响,以确认它是否是你的应用程序的正确选择!

更新日期:2018 年 10 月 7 日

现在我们可以在共享服务器上配置服务器 GC 使用的处理器数量限制,而无需使用容器(而不仅仅是默认使用工作站 GC)。

有关如何配置此功能的详细信息,请参阅 此链接

 

© . All rights reserved.