c# - .Net Garbage Collector - 查看在运行时提升到 Gen2 的内容

标签 c# .net debugging garbage-collection windbg

我的程序正在以非常高的速率(大约 1MB/秒)将内存提升到 Gen2,当发生 Gen2 收集时它会导致性能下降。 我试图了解哪些对象被提升的每一次尝试都失败了——主要是因为当我在 windbg 中打开 2 个转储时,用于增加 Gen2 大小的内存被标记为“空闲”。 这让我怀疑是 Pinned 对象导致了问题,但 perfmon 统计数据显示 Pinned 对象的数量非常低(大约 2-4)。

我现在想尝试的是在运行时以某种方式识别哪些对象被提升到 Gen2。 有没有办法做到这一点?

最佳答案

您可以使用 WinDbg 来调试此类问题。在垃圾收集例程上设置断点,检查托管堆,让垃圾收集发生,然后再次检查托管堆以查看现在哪些对象在 Gen2 中。

这里有一些链接可以开始:

Tracking down managed memory leaks

How to iterate on the objects present in the .NET managed heap?

Tess Ferrandez' blog

Investigating .NET Memory Management and Garbage Collection

抱歉,这不是您问题的直接、详细的答案,但它应该给您一个起点。

关于c# - .Net Garbage Collector - 查看在运行时提升到 Gen2 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217553/

相关文章:

c# - 如何通过API通过blob zip文件动态部署azure功能

c# - 未处理 Gridview 事件排序

c# - 访问 Win32_OperatingSystem 的属性

c# - .NET TypeScript 解析器到 AST

c# - 为什么在 'GET' ing 时会出现此 WCF 错误?

c# - 构造函数参数和继承

c# - FormattedText.BuildGeometry 删除字符

php - 建立一个Laravel项目

.net - 在 VS2010 中调试时出现 UI 阻塞

ios - iOS设备上的Phonegap调试需要拔出/插入才能工作