【发布时间】:2011-03-07 08:45:54
【问题描述】:
我的程序正在以非常高的速率(大约 1MB/秒)将内存提升到 Gen2,并且在 Gen2 收集发生时会导致性能下降。 我为了解提升了哪些对象所做的每一次尝试都失败了 - 主要是因为当我在 windbg 中打开 2 个转储时,用于增加 Gen2 大小的内存被标记为“空闲”。 这让我怀疑是固定对象导致了问题,但性能统计数据显示固定对象的数量非常低(大约 2-4)。
我现在正在考虑尝试以某种方式确定在运行时将哪些对象提升为 Gen2。 有没有办法做到这一点?
【问题讨论】:
-
我怀疑你没有处理你的一次性物品。大多数未处置的对象将运行它们的终结器并从那里处置。终结器阻止 GC 收集 se section "How Finalization Affects Collection".
-
你在分配大对象吗?在大对象堆上分配的 AFAIK 对象立即转到第 2 代。
标签: c# .net debugging garbage-collection windbg