由于MSDN saysConcurrentDictionary <TKey,TValue> VS字典<TKey,TValue>
ConcurrentDictionary<TKey, TValue>
类表示可以由多个线程同时访问的键值对的线程安全集合。
但我知道,System.Collections.Concurrent
类是专为PLINQ。
我有Dictionary<Key,Value>
这使上线的客户端服务器,我让线程通过锁定目标,当我有机会获得它的安全。
我可以放心地在我的情况下ConcurrentDictionary<TKey,TValue>
更换Dictionary<TKey,TValue>
?更换后性能会有所提高吗?
Here在第5部分约瑟夫阿尔巴哈利提到,它设计成用于并行编程
- 的并发集合被调谐为并行编程。除了高度并发的场景外,传统系列的表现都优于它们。
- 线程安全的集合不保证使用它的代码是线程安全的。
- 如果枚举一个并发收集,而另一个线程正在修改它,则不会抛出异常。相反,您会混合使用新旧内容。
- List没有并发版本。
- 并发堆栈,队列和包类是内部实现的链表。这使得它们的内存效率低于非并发栈和队列类,但对于并发访问更好,因为链表有利于锁定免费或低锁的实现。 (这是因为插入节点到链表需要更新,只是一对夫妇的参考,同时将元素插入一个列表状结构可能需要移动目前数以千计的元素。)
我不知道System.Collections.Concurrent类是“为PLINQ设计的”这个事实 - 你从哪里得到这个想法? – BrokenGlass 2011-03-14 19:38:52
@BrokenGlass:也许在lambda和匿名类型是“为LINQ设计”的意义上;他们由于* LINQ而成为框架*,但他们肯定具有超越它的适用性。 – 2011-03-14 19:40:05
@BrokenGlass和@Adam Robinson,请参阅编辑后文章 – 2011-03-14 20:01:55