首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.Net垃圾收集器-查看在运行时提升到Gen2的内容

.Net垃圾收集器-查看在运行时提升到Gen2的内容
EN

Stack Overflow用户
提问于 2011-03-07 16:45:55
回答 4查看 2.8K关注 0票数 8

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-07 16:59:48

您可以使用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

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

票数 5
EN

Stack Overflow用户

发布于 2011-03-07 23:00:28

有一些第三方memory profilers for .NET,给他们一个尝试,其中大多数允许你免费试用期。我希望任何领先的内存分析器都能让您快速了解正在发生的事情。

票数 2
EN

Stack Overflow用户

发布于 2011-03-07 22:21:31

你可能分配了很多LOH。这是一个在LOH分配上有一个断点的方法。Winbdg中的bp mscorwks!wks::gc_heap::allocate_large_object “!CLRStack”

HTH

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

https://stackoverflow.com/questions/5217553

复制
相关文章

相似问题

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