gal*_*arm 8 .net c# debugging garbage-collection windbg
我的程序以非常高的速率(大约1MB /秒)向Gen2提升内存,并且当Gen2收集发生时它会导致性能损失.我为了解哪些对象被提升而做出的每一次尝试都失败了 - 主要是因为当我在windbg中打开2个转储时,Gen2大小增加的内存被标记为"Free".这让我怀疑Pinned对象引起了问题,但是perfmon统计数据显示固定对象的数量非常低(大约2-4).
我现在正在考虑的是以某种方式识别哪些对象在运行时被提升为Gen2.有这样做的方法吗?
您可以使用WinDbg来调试此类问题.在垃圾收集例程上设置断点,检查托管堆,发生垃圾收集,然后再次检查托管堆以查看Gen2中的哪些对象.
以下是一些开头的链接:
对不起,这不是你的问题的直接,详细的答案,但它应该给你一个起点.