ConcurrentDictionary 和 ImmutableDictionary 之间有什么区别?

Nic*_*ico 3 .net c# multithreading dictionary

我正在阅读C# Cookbook 中的并发,这本书告诉我:

ConcurrentDictionary<TKey, TValue>当您有多个线程读取和写入共享集合时,这是最好的。如果更新不是恒定的(如果它们更罕见),那么这ImmutableDictionary<TKey,TValue> 可能是一个更好的选择。

我知道 Add or Remove a large immutable collection 可能很慢,我的问题是,它们之间还有其他区别吗?既然它们都是线程安全的,那么ImmutableDictionary当更新不是恒定的时,为什么是更好的选择呢?

Ale*_*lex 6

这两个类ConcurrentDictionary,并ImmutableDictionary进行了比较公正的,因为原因很简单,都是线程安全的

但是,ImmutableDictionary用于多线程并不是一个好主意。它旨在表示应加载一次且以后不应更改/修改的数据。任何修改都会导致创建 的新实例ImmutableDictionary,这并不是真正有效的。

  • 这本书说它并没有那么浪费,因为大多数时候不可变集合共享大部分内存 (2认同)
  • 线程安全方面仅与 *true* 不可变类型相关。我已经看到了为什么你可以调用一个类型 * 没有可观察的变化 * 可以被称为不可变的论据,即使内部发生了变化。这些对象显然不是隐式线程安全的,因为它们是“不可变的”。 (2认同)