【发布时间】:2011-12-22 08:24:30
【问题描述】:
我对堆中大对象的存储有点困惑。比如对象被认为是大的大小是多少?哪些类型更有可能被视为大对象?是否有任何明确的分片方法适用于管理此类对象。
【问题讨论】:
标签: c# object memory-management heap-memory
我对堆中大对象的存储有点困惑。比如对象被认为是大的大小是多少?哪些类型更有可能被视为大对象?是否有任何明确的分片方法适用于管理此类对象。
【问题讨论】:
标签: c# object memory-management heap-memory
This article 有很多细节,尽管你也应该注意changes coming in .NET 4.5。
可能最终出现在 LOH 上的唯一类型是字符串和数组 - 因为它们是唯一可以在执行时基本上可以指定大小的类型。我不确定是否有效 创建一个具有如此多字段的类型,以至于它最终会作为单个对象出现在 LOH 上 - 很可能是这样,但我无法想象它会发生在现实。
根据链接文章,目前限制为 85,000 字节。不过,这确实是一个实现细节——您应该很少需要考虑它。
【讨论】:
一般规则是:如果对象的大小为 85000 字节或更大,则认为它很大,并将放置在 LOH 上。
由于某种原因,double[] 的处理方式有所不同,因此任何具有 1000 个或更多元素的双精度数组也会出现在 LOH 上。我还没有看到任何关于这个实现细节的官方文档,但它很容易验证。
【讨论】: