这是优选的在多线程应用程序: Dictionary与锁定对象 或 Concurrency Dictionary带锁或Conconncy字典的词典?
哪些是有效的,为什么我应该使用一种或另一种?
编辑1:存储GUID作为关键和布尔值作为。
编辑2:2个以上的工作线程,一个UI线程。
这是优选的在多线程应用程序: Dictionary与锁定对象 或 Concurrency Dictionary带锁或Conconncy字典的词典?
哪些是有效的,为什么我应该使用一种或另一种?
编辑1:存储GUID作为关键和布尔值作为。
编辑2:2个以上的工作线程,一个UI线程。
仔细约ConcurrentDictionary阅读。它有一些不明显的特征。
下面是其中一些:
AddOrUpdate
没有保证哪个厂家代表将被调用,甚至不能保证,如果一个工厂的代表,会产生一些项目,这个项目将是存储在字典中。GetEnumerator
调用获得的枚举器是而不是快照,并可能在枚举过程中被修改(这不会导致任何异常)。Keys
和Values
属性是对应集合的快照,并可能不对应于实际字典状态。所以请有关ConcurrentDictionary再次读取,并决定是否这种行为是你所需要的。
希望这会有所帮助!
当你实现一个锁对象字典,你主要关注的似乎是线程安全的。所以看起来,并发词典已经处理了这个问题。我认为重新发明车轮没有意义。
并不总是如此。如果速度很快,手动锁定可能会更好。 – 2012-03-26 07:46:01
根据情况,您可能是对的,另一方面,这种情况下没有适用的绩效数据。定制测试可以验证性能增益(如果有的话)。 – daryal 2012-03-26 07:50:18
速度确实很重要。 – 2012-03-26 07:53:39
我认为两者都将提供线程安全的,但使用字典与锁定对象将限制可以在使用并发字典并发访问字典为1线程的数量,你可以指定并发级别(即线程数量可以同时访问字典)。如果性能确实重要,我相信Concurrent Dictionary应该是您的选择。
我会说你有以下选项。
一些新的框架4.0类:
所有新的4.0类工作得更快,但必须由levanovd提到的一些功能。这些类的性能比较,你可以找到here。
从早期版本的一些经典解决方案:
如果我不得不使用框架v3.5版本的限制,我会用字典 + ReaderWriterLock或ReaderWriterLockSlim。
这将取决于情况。 – 2012-03-26 07:44:44
[dictionary-locking-vs-concurrentdictionary]可能重复(http://stackoverflow.com/questions/1949131/net-dictionary-locking-vs-concurrentdictionary) – 2013-05-03 18:46:15