带锁或Concurency词典的字典?

rad*_*scu 6 .net c# concurrency dictionary

这是优选的在多线程应用程序: 字典与锁定对象或 并发字典

哪个有效,我为什么要使用其中一个?

编辑1:将Guid存储为键,将bool存储为值.

编辑2:超过2个工作线程和一个UI线程.

Ale*_*aus 6

我会说你有以下选择.

一些新的Framework 4.0类:

  • ConcurrentDictionary.工作快速可靠.
  • ConcurrentBag.它是无序的对象集合,因此它的工作速度更快,但如果您不需要排序则适合.
  • ConcurrentStack.它是经典LIFO(后进先出)数据结构的实现,提供线程安全访问,无需外部同步
  • ConcurrentQueue.它是一个线程安全的FIFO(先进先出)集合.

所有新的4.0类都运行得更快,但有levanovd提到的一些功能.您可以在此处找到这些类的性能比较.

早期版本的一些经典解决方案:

如果我有使用Framework v3.5的限制,我会使用Dictionary + ReaderWriterLockReaderWriterLockSlim.


lev*_*ovd 5

仔细阅读有关ConcurrentDictionary的内容。它具有一些不明显的功能。

这里是其中的一些:

  • 如果有两个线程调用,AddOrUpdate则不能保证将调用哪个工厂委托,甚至不能保证如果工厂委托会产生某些项目,则该项目将存储在字典中。
  • 通过GetEnumerator调用获得的枚举器不是快照,可以在枚举期间进行修改(不会引起任何异常)。
  • KeysValues属性是对应集合的快照,可能与实际字典状态不对应。
  • 等等

因此,请再次阅读有关ConcurrentDictionary的内容,并确定是否需要这种行为。

希望这可以帮助!