首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分析GarbageCollections

如何分析GarbageCollections
EN

Stack Overflow用户
提问于 2016-09-28 16:16:40
回答 1查看 45关注 0票数 0

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

这是前10秒。正如你所看到的,我有很多GC的调用。对我来说,似乎有许多小对象是在启动时创建的,但程序并不真正需要它们。我如何分析发生了什么或者这种行为是正常的吗?

EN

回答 1

Stack Overflow用户

发布于 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部分中可以找到性能问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39741727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档