在多线程应用程序中首选: 带有锁定对象的Dictionary 要么 Concurrency Dictionary
哪个有效,我为什么要使用其中一个?
编辑1:将Guid存储为键,将bool存储为值。
编辑2:超过2个工作线程和一个UI线程。
答案 0 :(得分:6)
我会说你有以下选择。
一些新的Framework 4.0类:
所有新的4.0类都运行得更快,但具有 levanovd 提到的一些功能。您可以找到这些课程的效果比较here。
早期版本的一些经典解决方案:
如果我限制使用Framework v3.5,我会使用 Dictionary + ReaderWriterLock 或 ReaderWriterLockSlim 。
答案 1 :(得分:4)
当您使用锁定对象实现字典时,您的主要关注点似乎是线程安全。看来,concurrentDictionary已经解决了这个问题。我认为重新发明轮子是没有意义的。
答案 2 :(得分:4)
仔细阅读ConcurrentDictionary。它有一些不明显的特征。
以下是其中一些:
AddOrUpdate
,则无法保证将调用哪个工厂代理,甚至不能保证工厂代表会生成某个项目,该项目将存储在字典中。< / LI>
GetEnumerator
来电获得的调查员不快照,可能会在枚举期间进行修改(不会导致任何例外情况)。Keys
和Values
属性是相应集合的快照,可能与实际字典状态不对应。因此,请再次阅读ConcurrentDictionary并确定此行为是否符合您的要求。
希望这有帮助!
答案 3 :(得分:1)
我认为两者都将提供线程安全,但是使用带有lock对象的Dictionary会将可以同时访问Dictionary的线程数限制为1.使用Concurrent Dictionary时,可以指定并发级别(即可以使用的线程数)同时访问字典)。如果性能确实很重要,我相信Concurrent Dictionary应该是您的选择。