Tub*_*iar 5 c# dictionary allocation
List 有单独的属性用于获取Count及其Capacity。与所有集合一样,字典也具有Count属性,并且它具有容量,因为它有几个允许您指定它的构造函数,并且Add方法的文档提到了它。但是,我没有看到任何查询字典当前容量的方法。
即使无法获取字典的当前容量,是否有任何方法可以预测何时可能发生重新分配?
字典的工作方式并不完全像列表。如果你检查微软提供的源代码。您可以找到多个可能有帮助的私有字段。
请注意,这是一个封装的实现细节,您不应在生产代码中依赖它,因为私有和内部成员的名称、行为可能会发生变化,恕不另行通知!
您有内部数组int[] buckets和Entry[] entries. 你还有int freeList和int freeCount。您可以使用反射来解决这些问题。
要回答您的问题,是的,每次插入都会触发重新分配,这是实际的代码:
int index;
if (freeCount > 0)
{
index = freeList;
freeList = entries[index].next;
freeCount--;
}
else
{
if (count == entries.Length)
{
Resize();
targetBucket = hashCode % buckets.Length;
}
index = count;
count++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1819 次 |
| 最近记录: |