C#大对象和堆

时间:2011-11-04 20:19:05

标签: c# memory-management object heap

我对堆中大对象的存储感到有点困惑。比如大小对象的大小是多少?哪些类型更有可能被视为大型对象?是否有适合管理此类对象的明确碎片方法。

2 个答案:

答案 0 :(得分:7)

This article有很多详细信息,但您也应该了解changes coming in .NET 4.5

唯一可能最终出现在LOH上的类型是字符串和数组 - 因为它们是在执行时基本上可以给出大小的唯一类型。我不确定它甚至有效来创建一个具有如此多字段的类型,它最终会作为单个对象在LOH上结束 - 它可能是,但我无法想象它发生在现实。

根据链接文章,限制目前是85,000字节。这真的是一个实现细节 - 你应该很少考虑它。

答案 1 :(得分:3)

一般规则是:如果对象的大小为85000字节或更多,则认为它很大并将放在LOH上。

由于某种原因,double[]的处理方式不同,因此任何具有1000个或更多元素的双精度数组也会在LOH上进行处理。我没有看到任何关于此实现细节的官方文档,但它很容易验证。