正如MSDN 所说
ConcurrentDictionary<TKey, TValue>
类 表示可由多个线程同时访问的键值对的线程安全集合。
但据我所知,System.Collections.Concurrent
类是为 PLINQ 设计的。
我有Dictionary<Key,Value>
它在服务器中保持在线客户端,并且当我可以访问它时通过锁定对象来使其线程安全。
在我的情况下,我可以安全地替换Dictionary<TKey,TValue>
为ConcurrentDictionary<TKey,TValue>
吗?更换后性能会提高吗?
在第 5 部分中,Joseph Albahari 提到它是为并行编程而设计的
- 并发集合针对并行编程进行了调整。除了高度并发的场景,传统的集合在所有场景中都优于它们。
- 线程安全的集合并不能保证使用它的代码是线程安全的。
- 如果您在另一个线程正在修改并发集合时枚举并发集合,则不会引发异常。相反,您会得到新旧内容的混合。
- List 没有并发版本。
- 并发堆栈、队列和包类在内部使用链表实现。这使得它们的内存效率低于非并发 Stack 和 Queue 类,但更适合并发访问,因为链表有利于无锁或低锁实现。(这是因为将节点插入到链表中只需要更新几个引用,而将元素插入到类似列表的结构中可能需要移动数千个现有元素。)