是.net系统范围内的垃圾收集器还是应用程序范围内的垃圾收集器?

时间:2011-08-08 12:51:19

标签: c# .net garbage-collection

在与我的同事讨论时,我怀疑.net中的垃圾收集器是在系统范围内还是在应用程序范围内工作。

表示每个具有自己的GC的应用程序是否会影响系统性能?

我对此有点困惑。

4 个答案:

答案 0 :(得分:23)

每个进程都有自己的托管堆,将单独收集。

没有系统范围的堆,因此没有系统范围的GC。

(如果你在同一个过程中运行多个CLR,他们每个人都有自己的GC。但这是非常罕见的情况。)

答案 1 :(得分:7)

.Net运行时的Workstation \ Server版本中的每个进程都有一个垃圾收集器。 GC为每个托管进程引入了CPU开销。

这是否会对系统性能产生影响取决于您拥有多少个托管进程以及是否花费大量时间收集垃圾。您可以通过检查性能计数器“%GC在GC中花费的时间”来分析您的流程花费多少时间来收集垃圾。

答案 2 :(得分:4)

每个应用程序都有自己的堆和.NET运行时实例,因此它也有自己的垃圾收集器线程。

答案 3 :(得分:2)

请查看此页面(http://msdn.microsoft.com/en-us/library/ee787088.aspx),尤其是“管理堆”部分。这应该回答你的问题。

相关问题