ConcurrentDictionary和ImmutableDictionary之间的区别是什么?

时间:2018-02-08 09:38:23

标签: c# .net multithreading dictionary

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

  当你有多个时,

ConcurrentDictionary<TKey, TValue>是最好的   读取和写入共享集合的线程。如果有更新   不是常数(如果它们更罕见),而不是ImmutableDictionary<TKey,TValue>   可能是一个更好的选择。

我知道添加或删除一个大的不可变集合可能很慢,我的问题是,它们之间还有其他区别吗?现在它们都是线程安全的,为什么ImmutableDictionary在更新不稳定时是更好的选择?

2 个答案:

答案 0 :(得分:3)

这两个类ConcurrentDictionaryImmutableDictionary只是因为一个简单的原因进行了比较,两者都是线程安全

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

答案 1 :(得分:0)

不可变更改,即没有添加/删除可以改变现有字典,而是创建一个新的除了已删除项目之外的所有字段。并发在lock { }语句上进行,与可变性无关。锁是必要的,以管理由多个单线程完成的写操作到同一个内存块(即同一个对象)。