与List <t> </t>相比,为什么ImmutableList <t>的枚举器要慢得多</t> </t>

时间:2015-02-20 04:01:28

标签: c# immutablelist immutable-collections

我有一段代码经常迭代一个小列表。鉴于列表在运行时期间永远不会更改,我将实现替换为ImmutableList<T>。通过dotTrace查看性能跟踪,这比正常List<T>

更糟糕

dotTrace Result (左侧为List<T>,右侧为ImmutableList<T>

为什么会出现这种情况并且有解决方法?

1 个答案:

答案 0 :(得分:10)

与包含根据需要调整大小的数组的List<T>不同,ImmutableList<T>内部使用不可变AVL treesee Channel9 video discussing this)。

那么我怎么能用Immutable Collections来实现呢?

使用ImmutableArray<T>

引用.NET Framework blog post关于不可变集合

  

使用不可变数组的原因:

     
      
  • 更新数据很少或元素数量非常少(<16)
  •   
  • 您需要能够在性能关键部分中迭代数据
  •   
  • 您有许多不可变集合的实例,而且您无法负担将数据保存在树中
  •   
     

坚持使用不可变列表的原因:

     
      
  • 通常更新数据或预计元素数量不会很小
  •   
  • 更新集合比迭代内容更具性能要求
  •