并发、后台和服务器垃圾收集在C#中有什么不同?

并发、后台和服务器垃圾收集在C#中有什么不同?,c#,garbage-collection,C#,Garbage Collection,我知道配置设置,但是我读过的文档和文章都提到了后台垃圾收集,包括独立线程和并发。该文档还讨论了服务器模式下的多线程。有人能澄清这些区别吗?我试图了解更改配置中的设置会产生什么结果,以及如何与更改设置相适应 从.NETFramework4开始,并发垃圾收集被后台垃圾收集取代。术语concurrent和background在.NET Framework文档中互换使用 因此,我们可以说,后台GC使用专用线程与应用程序的线程同时进行垃圾收集。此并发收集仅发生在第2代(0和1是快速的) 工作站GC 这是默

我知道配置设置,但是我读过的文档和文章都提到了后台垃圾收集,包括独立线程和并发。该文档还讨论了服务器模式下的多线程。有人能澄清这些区别吗?我试图了解更改配置中的
设置会产生什么结果,以及如何与更改设置相适应

从.NETFramework4开始,并发垃圾收集被后台垃圾收集取代。术语concurrent和background在.NET Framework文档中互换使用

因此,我们可以说,后台GC使用专用线程与应用程序的线程同时进行垃圾收集。此并发收集仅发生在第2代(0和1是快速的)

工作站GC

这是默认设置,在单处理器环境中强制执行

后台GC始终处于启用状态

服务器GC

GC将为每个逻辑处理器创建一个垃圾收集线程,并为每个线程创建单独的对象堆(您的代码将不知道这一点),这允许更快的并行/并发GC

您可以在.config文件中启用服务器GC,方法是:

<configuration>
  <runtime>
    <gcServer enabled="true"/>
  </runtime>
</configuration>

默认情况下启用后台GC,但可以在如下配置中禁用:

…
<gcConcurrent enabled="false"/>
…
…
…
是的,启用后台GC以及服务器模式将导致每个逻辑处理器有2个线程仅用于GC,但这不是一个大问题,因为它们在GC操作之外处于挂起状态。

可能会重复