垃圾收集率很高

时间:2013-09-17 17:12:23

标签: .net wpf

我看到gen 1对象的促销率很高。当我在我的应用程序中启动一个窗口时,第1代中的所有对象都被提升为第2代。我相信它会因调用InitializeComponent()而发生。如果我对这一行进行评论,那么对象就不会被提升为第2代。对于为什么会发生这种情况有任何想法吗?

1 个答案:

答案 0 :(得分:1)

来自here

  

垃圾回收中未回收的对象称为   幸存者,并被提升为下一代。对象那个   幸存下来的第0代垃圾收集被提升为一代   1;促进在第1代垃圾收集中存活的对象   第2代;和在第2代垃圾中存活的物体   集合保留在第2代。当垃圾收集器检测到时   在一代人的生存率很高,它增加了   该代的分配门槛,所以下一个集合   获得了相当大的回收内存。 CLR不断   平衡两个优先级:不让应用程序的工作集得到   太大了,不要让垃圾收集花费太多时间

所以我认为最初的阈值相当低,InitializeComponent会触发大量的分配,强制至少两个集合(因此将第一个对象推广到第2代)。可能GC会检测到它并增加阈值,并且在物体无法轻易到达第2代之后。所以基本上它看起来像应用程序生命周期的早期阶段的人工制品(当事情正在调整时)。

这里的主要问题是你的申请是否有问题?你有性能问题吗?还是其他什么?或者只是出于好奇?

我可以使用性能监视器轻松验证(或揭穿)我的假设,如here所述。你只需看看计数器,看看会发生什么。看看几代人收集了多少收藏品,生存率是多少。