c# - .net 中有哪些不同的堆?

标签 c# .net memory-management garbage-collection heap-memory

我在 dotmemory 中分析 Windows 窗体应用程序的内存使用情况,我注意到我的应用程序有 0-4 个大小不一的堆以及大对象堆。

我只是想知道是否有人对每个堆的用途以及每个堆中通常存储的内容有很好的解释?

最佳答案

其他答案似乎忽略了 之间存在差异这一事实。我不明白为什么商业分析器会混淆这两个概念,所以我强烈怀疑它毕竟是堆而不是世代。

当 CLR GC 使用 server flavor ,它为进程的关联掩码中的每个逻辑处理器创建一个单独的堆。这种分割的原因主要是为了提高分配的可伸缩性,并在 GC 中并行执行。这些是独立的内存区域,但是您当然可以在堆之间有对象引用,并且可以将它们视为单个逻辑堆。

因此,假设您有四个逻辑处理器(例如启用了超线程的 i5 CPU),您将在服务器 GC 下有四个堆。

大对象堆有一个不幸的、令人困惑的名字。它不是与每个处理器堆相同意义上的堆。它是在包含大型对象的多个 内存区域之上的逻辑抽象。

关于c# - .net 中有哪些不同的堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31598307/

相关文章:

c# - 在 WCF 服务中使用语句

c# - 如何检查是否可以在 C# 中使用另一个字符串的字符获取一个字符串?

c# - 动态构建连接字符串

c# - 同步两个 RichTextBox 的滚动位置?

c++ - 是否可以在其范围之外访问局部变量的内存?

c# - 根据多种条件过滤服务器

c# - 上传文件并过滤其扩展名

c# - Azure表存储,帮助我澄清批量操作幕后发生的事情

经过数小时调试后的 iOs 内存警告

php - 为什么一个简单的 PHP unset() 内存测试使用的内存量是 PHP 5.3 的两倍?