可能没有答案。
分析一些代码,我注意到Gen1堆大小是250MB,然后在单个Gen0集合之后,它上升到518MB。 因此Gen0在收集之前达到了250MB。
我一直认为Gen0和Gen1(尽管它们不是固定的并且可以变化)比这个要小得多。
对于不同世代的预期尺寸范围,我们能说些什么吗?
(这是在具有8GB Ram,.Net 4.5.2的机器上的Workstation GC下。我们实际上正在测量MSTest / QTAgent下的代码,这可能会影响GC的执行方式)
答案 0 :(得分:1)
我搜索了一下,发现了许多关于每一代初始尺寸的说法,但他们每个都声称不同的数字。可以安全地假设它从低位开始并根据分配和集合而改变大小。但你已经知道了。
没有什么比#"正常"世代大小。如果你分配了许多小对象并且不能让它们保持太长时间,那么Gen0的大小会保持较低,并且集合会更频繁地发生,但速度非常快。但是,如果您分配的对象较少但尺寸较大,则Gen0大小可能会增加,并且集合的发生频率会降低。
在这种情况下,你应该关注这些数字的情况并不多。如果你想分析这些世代如何改变它们的大小,运行像DotTrace这样的东西并观察大小增加之前的内容,也许你将能够分辨出什么方法/链调用/ ......引起它。