我有一段代码经常迭代一个小列表。鉴于列表在运行时期间永远不会更改,我将实现替换为ImmutableList<T>
。通过dotTrace查看性能跟踪,这比正常List<T>
:
(左侧为
List<T>
,右侧为ImmutableList<T>
)
为什么会出现这种情况并且有解决方法?
答案 0 :(得分:10)
与包含根据需要调整大小的数组的List<T>
不同,ImmutableList<T>
内部使用不可变AVL tree(see Channel9 video discussing this)。
引用.NET Framework blog post关于不可变集合
使用不可变数组的原因:
- 更新数据很少或元素数量非常少(<16)
- 您需要能够在性能关键部分中迭代数据
- 您有许多不可变集合的实例,而且您无法负担将数据保存在树中
坚持使用不可变列表的原因:
- 通常更新数据或预计元素数量不会很小
- 更新集合比迭代内容更具性能要求