当用户“Server”垃圾收集时,为什么我看起来有内存泄漏?

时间:2010-02-23 22:56:41

标签: c# .net memory garbage-collection

这是我的情况。我想要解释为什么会这样。我正在阅读关于GC here的内容,但我仍然没有得到它。

工作站案例:当我使用工作站垃圾收集运行时,我的应用程序在“.NET CLR Memory #bytes all heap”中使用大约180MB的专用字节和大约70MB。记忆继续稳定几个小时。生活很美好。

服务器案例当我使用服务器垃圾收集运行时,我的应用程序使用大约500MB的专用字节,但在“.NET CLR Memory #bytes in all sheaps”中仍然只有大约70MB。对.DumpHeap -stat输出和!GCRoot的分析显示了很多没有根的对象。此外,我的私有字节在几个小时内显着增加,但.NET字节保持不变。我的应用程序使用了很多非托管代码,所以我认为这是相关的,因为私有和.NET字节的差异。但是为什么我的生活在服务器机箱中如此糟糕?

任何GC有关进一步调查的智慧或指导?

谢谢!

1 个答案:

答案 0 :(得分:5)

“服务器垃圾收集”专为高吞吐量应用程序而设计,主要用于群集服务器。

服务器GC很昂贵,并且在发生时暂停正在运行的线程。因此,在实际触发之前需要 lot 更多的内存压力 - 如果你还有备用内存,如果垃圾收集器感觉不需要通过,请不要感到惊讶清理干净。