.NET有类似于Java的垃圾收集日志吗?

时间:2010-01-08 21:03:53

标签: c# .net logging garbage-collection

.NET是否有类似Java的垃圾收集日志?我想将GC统计信息写入生产应用程序中的日志。谷歌并没有告诉我任何有用的东西,所以似乎也没有任何相关的问题。

由于

3 个答案:

答案 0 :(得分:6)

GC统计数据可用作效果计数器。在perfmon中,它们显示在“.NET CLR Memory”类别下。您可以通过System.Diagnostics命名空间(PerformanceCounterXxx类)以编程方式访问perf计数器,或使用Server Explorer创建方便的包装器。

请注意,这些是 statistics ,并且不提供详细的按对象记录。

答案 1 :(得分:3)

当perf统计信息告诉您存在问题时,您可以使用调试器(windbg)深入查找泄漏。 !GCRoot命令允许您找出未收集内存的原因。有关详细信息,请参阅this blogpost

答案 2 :(得分:0)

您可以使用Garbage Collection Notifications自行设置某种级别的GC日志记录。但请注意,如果您正在使用ConcurrentGC(这对于服务器端应用程序而言是典型的),您只会收到针对stop-the-world GC的通知。所以它不像Java等价物那么完整,但它是一些东西。

通过ETW记录还可以获得相当多的GC相关信息。可能可以连接您自己的ETW监听器并以这种方式提取信息,但我不知道这样做的预先烘焙方法。