ImmutableArray <t>和ImmutableList <t> </t> </t>之间的区别

时间:2014-03-12 11:18:45

标签: c# .net immutable-collections

ImmutableArray<T>ImmutableList<T>之间有什么区别?哪种情况最适合使用?

4 个答案:

答案 0 :(得分:25)

以下是一些可能有助于解释的阅读

http://blogs.msdn.com/b/dotnet/archive/2013/06/24/please-welcome-immutablearray.aspx

这里是一段摘录

使用不可变数组的原因:

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

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

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

答案 1 :(得分:19)

我想你在问两者在哪里使用。这个blog会有所帮助,否则这里会提到一些好处。

在以下情况下使用不可变数组:

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

在以下情况下使用不可变列表:

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

答案 2 :(得分:2)

主要区别在于ImmutableArray只是普通数组的包装,这意味着检索数组中的元素非常快。

ImmutableArray也是一个结构,意味着它是一个值类型,因此它占用的空间比作为引用类型的不可变列表占用的空间少。

由于这些原因,ImmutableArray适合使用,如果您很少需要更新其数据或元素数量很少(小于16),或者迭代集合的性能很重要。

如果您的需求与上述原因不符,则应使用ImmutableList

在这里查看documentation

答案 3 :(得分:1)

通过博客文章“Please welcome ImmutableArray<T>”(其他人都在引用的博客文章),差异是......

ImmutableArray

  • 简单实现(只是一个数组)。
  • 未针对快速更新大型集合进行优化(需要复制整个阵列)。
  • 对大多数用例更有效(任何涉及更新大型集合的内容)。

ImmutableList

  • 更复杂的实施(涉及树木的事情)。
  • 优化以快速更新大型馆藏(可以在对数时间内完成)。
  • 对大多数用例效率较低。

因此,如果您的更新不是很多,或者您的馆藏很小,请使用ImmutableArray。如果您要经常更新大型馆藏,则需要使用ImmutableList