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

这是前10秒。正如你所看到的,我有很多GC的调用。对我来说,似乎有许多小对象是在启动时创建的,但程序并不真正需要它们。我如何分析发生了什么或者这种行为是正常的吗?
发布于 2016-09-28 16:44:13
完整的垃圾收集非常昂贵,因此.NET框架使用了3种不同的部分收集:第0代、第1代和第2代。第0代垃圾收集最频繁,第1代最少,第2代最少。垃圾收集器收集的数量通常不是问题,这是由垃圾收集器确定和优化的,不应该被摆弄。每个第1代可以有大量的第0代集合,第1代和第2代也是如此。这就是它的操作方式。
可能导致问题的是,许多对象在较低一代的集合中幸存下来,并被提升到较高的一代。例如,使用大量的IDisposable类型。在第0代收集上,不收集IDisposable,而是将其标记为第1代收集(因为必须先执行Dispose()才能收集它)。由于第1代收集的频率要低得多,因此您不希望有许多对象在第0代收集中幸存下来,因为它们会占用内存更长时间。同样,您也不希望将第1代对象提升到第2代集合中,因为第2代集合的频率更低。
可以使用Windows性能监视器检查垃圾回收器运行的比率。在.NET CLR Memory部分中可以找到性能问题。

https://stackoverflow.com/questions/39741727
复制相似问题