C#大对象和堆

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

虽然您应该了解.NET 4.5中的更改 ,但本文还是有很多细节。

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

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

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

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