如何分析GarbageCollections

时间:2016-09-28 08:16:40

标签: c# .net wpf garbage-collection

在我的wpf应用程序中,我有以下GC和ProcessMemory行为。

enter image description here

这是前10秒。正如你所看到的,我有很多关于GC的调用。对我来说,看起来很多小对象都是在开始时创建的,但程序并不需要。 我如何分析发生了什么或这种行为是否正常?

1 个答案:

答案 0 :(得分:0)

完整的垃圾收集非常昂贵,因此.NET框架使用了3个不同的部分集合:第0代,第1代和第2代。第0代垃圾收集是最常见的,第1代较少,生成2最少。垃圾收集器集合的数量通常不是问题,这由垃圾收集器确定和优化,不应该被摆弄。每代1可以有大量的第0代集合,第1代和第2代也是如此。这就是它的运作方式。

可能导致问题的是许多对象在下一代集合中存活并被提升为更高的集合。例如,使用很多IDisposable类型。在第0代集合中,不收集IDisposable,而是将其标记为第1代集合(因为Dispose()必须在收集之前执行)。由于第1代集合的频率要低得多,因此您不希望很多对象在第0代集合中存活,因为它们会占用内存更长的时间。同样,您不希望将第1代对象提升为第2代集合,这些集合甚至更少见。

您可以使用Windows性能监视器来检查垃圾收集器运行的比率。性能问题可以在.NET CLR Memory部分找到。

PerformanceMonitorGCCounters