【发布时间】:2015-10-14 09:42:54
【问题描述】:
我在 dotmemory 中分析 Windows 窗体应用程序的内存使用情况,我注意到对于我的应用程序有 0-4 个大小不一的堆以及大型对象堆。
我只是想知道是否有人很好地解释了每个堆的用途以及每个堆中通常存储的内容?
【问题讨论】:
-
这可能与 C# 垃圾收集器的工作方式有关。我认为这是一个分代 GC,它根据数据的最近使用情况来分离数据。
-
有3个堆+大对象堆。所有对象都分配在堆 0 中。如果它们在一次垃圾收集中幸存下来,它们将被提升到堆 1,然后到堆 2,然后一直留在那里直到被收集。大对象堆 (LOH) 用于大小为 85000 字节或更大的对象(不是总的,连续的,如数组)。我不知道你从哪里得到第五堆。
-
Eric Lippert 写了一篇很棒的博客文章(分为两部分),介绍了堆栈和堆以及它的工作原理。看这里:blogs.msdn.com/b/ericlippert/archive/2009/04/27/…
-
不确定这个问题的否决/关闭投票是为了什么 - 似乎很清楚,客观上可以回答,并且对于 SO 有答案将是一个非常有用的问题。不过,它可以做一些重新定位。
标签: c# .net memory-management garbage-collection heap-memory