8

我有一段代码经常迭代一个小列表。鉴于列表在运行时从不更改,我将实现替换为ImmutableList<T>. 查看 dotTrace 的性能跟踪,这比正常的性能差得多List<T>

dotTrace 结果List<T>在左边,ImmutableList<T>在右边)

为什么会发生这种情况,是否有解决方法?

4

1 回答 1

17

List<T>环绕根据需要调整大小的数组不同,ImmutableList<T>内部使用不可变的AVL 树参见 Channel9 视频讨论)。

那么我怎样才能使用不可变集合来实现这一点呢?

使用ImmutableArray<T>.

引用关于不可变集合的.NET Framework 博客文章

使用不可变数组的原因:

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

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

  • 更新数据很常见或预计元素数量不会很少
  • 更新集合比迭代内容更重要
于 2015-02-20T04:01:28.360 回答