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