并发、后台和服务器垃圾收集在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操作之外处于挂起状态。可能会重复