我对堆中大对象的存储感到有点困惑。比如大小对象的大小是多少?哪些类型更有可能被视为大型对象?是否有适合管理此类对象的明确碎片方法。
答案 0 :(得分:7)
This article有很多详细信息,但您也应该了解changes coming in .NET 4.5。
唯一可能最终出现在LOH上的类型是字符串和数组 - 因为它们是在执行时基本上可以给出大小的唯一类型。我不确定它甚至有效来创建一个具有如此多字段的类型,它最终会作为单个对象在LOH上结束 - 它可能是,但我无法想象它发生在现实。
根据链接文章,限制目前是85,000字节。这真的是一个实现细节 - 你应该很少考虑它。
答案 1 :(得分:3)
一般规则是:如果对象的大小为85000字节或更多,则认为它很大并将放在LOH上。
由于某种原因,double[]
的处理方式不同,因此任何具有1000个或更多元素的双精度数组也会在LOH上进行处理。我没有看到任何关于此实现细节的官方文档,但它很容易验证。