11

如果我想Dictionary一次将大量项目添加到 a 并且我提前知道(粗略)数字,那么如果我使用适当的构造函数重载设置初始容量,它在内存和 cpu 方面会更快更高效。

在我测试的情况下,使用 300.000 个条目,如果我将 Dictionary 的容量设置为 300.000,它比未初始化时快大约 25%。

现在,如果我有一个已经构建的空字典,我需要填充很多项目,我该怎么办?假设这是一个readonly我不能用新的 Dictionary 实例重新分配的变量。我在文档中看不到任何影响已经构建的 Dictionary 容量的东西。像 a这样的东西Clear(int newInitialCapacity)会很好。

我运气不好?

4

2 回答 2

0

看起来答案是:是的,我不走运。已经构建的字典的容量不能改变,当然除了通过逐个添加元素来递增。

如果 .netDictionary有一个AddAll(..)类似于Java 的putAll的方法,那么我可以把它留给Dictionary实现者的聪明才智。

于 2013-03-28T02:03:58.157 回答
-1

您声明“在文档中看不到任何影响已构建字典容量的内容”。

根据文档,容量不会在清除时重置。

Dictionary.Clear 方法

Count 属性设置为 0,同时释放集合元素对其他对象的引用。容量保持不变。

您有一本词典,其中包含超过 300,000 个项目和性能调整,但您没有新词典的选项?

可能值得检查 KeyCollection,因为您可以覆盖 ClearItems。

KeyedCollection.ClearItems 方法

在 HashSet 上有一个 TrimExcess。

HashSet.TrimExcess 方法

于 2013-03-25T13:29:18.807 回答