具有大量项目的.NET集合是否易于存储在LOH中?
我特别好奇List和Dictionary.在我的代码中,我将大量(40k +)相对较小的对象(比如1k)存储在临时列表和Dictionarys中进行处理.这些收藏中的物品数量是否会增加被放置在LOH上的可能性?
对于列表,假设List实现为双向链表,那么元素的数量不应该增加实际List对象的大小,但我想知道肯定.
谢谢
如果对象超过85,000字节,它们将仅存储在LOH上.一个大的列表(特别是结构)通常会在这里分配.
但是,Dictionary的可能性较小,因为它们存储了一个桶阵列,因此除非生成足够的桶以使阵列变为> 85000字节,否则不太可能.一个40k元素的列表将存储在LOH上,即使它们是类(因为每个元素中的对象引用将导致列表在x86上为160k,在x64系统上为320k).但是,各个元素将位于标准堆上,因此会被压缩,等等.
如果您使用双向链表而不是标准列表,则它不太可能存储在LOH上.列表的每个元素都很小(只有一个节点,引用了下一个/前一个节点),因此没有一个对象将超过85k字节.
有关LOH的详细信息,这是一篇很棒的博客文章.