我试图了解 C# .NET 4.0 如何List<T>(initSize)分配内存。
我的问题是我有一个List<foo>where 类foo需要至少 20 字节的内存。我有两种情况,我最终X会X+60拥有foo. 我不知道在分配时会是这两种情况中的哪一种。
由于大于 36,000 个元素,因此我试图尽量减少不必要的内存分配,如果可以避免的话X,我不想为一个分配两次。List我的理解是分配的大小(36k 个元素 * 4B 参考 ~= 144kB)将分配推到大堆上。更让我烦恼的是,我有一个Dictionary<key, List<foo>>大约 4,000 个元素。
我的问题:
C# 运行时是否分配了超出初始指定容量的数量?例如,如果我初始化为 36,000 个条目,我是否真的分配了 65,536 个条目,因为这是 2 的下一个大于 36,000 的幂?
我应该
X+60在所有情况下都分配给而不是X避免第二次分配吗?在这种情况下,60 恰好是一个不会变化的常数值。
我的问题类似,但与以下问题不同:
.NET 中集合的内存分配 - 因为它们没有List<T>在这个问题中初始化。
集合类型的初始容量,例如字典、列表 - 是指定初始容量的实现问题。
如何将 List<T> 初始化为给定大小(而不是容量)?- 似乎正在与Arrayvs搏斗List<T>,这不是我的问题。