我听说 .NETSystem.Collections.Immutable
集合被实现为平衡二叉树,以满足其不变性约束,甚至是传统上对哈希表进行建模的集合,例如Dictionary
,通过使用积分值GetHashCode
作为排序键。
如果我有一种类型,生成哈希码的成本很低,并且比较的成本也很低(例如string
or int
),而且我不关心我的收藏的排序,更喜欢它是否有意义ImmutableSortedDictionary
因为底层数据结构无论如何都是排序的?
答案是yes,更喜欢是有道理的ImmutableSortedDictionary
在某些条件下,例如Int32
keys.
就我而言,与Int32
键我发现ImmutableSortedDictionary
是一个更好的选择。
我使用 100 万个项目运行了一个小型基准测试:
- 按键升序插入 1,000,000 个项目
- 更新 1,000,000 个随机项目
- 扫描 1,000,000 个项目,即对集合中的每个项目迭代一次
- 读取 1,000,000 个随机项目
- 删除 1,000,000 个随机项目
ImmutableDictionary
Insert: 2499 ms
Update: 7275 ms
Scan: 385 ms
Read: 881 ms
Delete: 5037 ms
ImmutableSortedDictionary
Insert: 1808 ms
Update: 4928 ms
Scan: 246 ms
Read: 732 ms
Delete: 3522 ms
ImmutableSortedDictionary
比ImmutableDictionary
关于所有操作。请注意,插入是按键的升序一次完成一项(因为它恰好符合我的特定用例)。
但是,您还应该考虑使用可变集合有一些锁定。写入可变对象Dictionary<int, object>
速度快了一个数量级。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)