我有这样定义的四级数据结构:
Dictionary<Type1, Dictionary<Type2, Dictionary<Type3, List<Type4>>>>
整个事情都封装在一个类中,该类也保持线程安全。目前它只是在读取/操作数据时锁定整个集合(读取比写入更常见几个数量级)。
我正在考虑将 Dictionary
替换为 ConcurrentDictionary
和 List
为 ConcurrentBag
(它的项目不必订购)。
如果我这样做,我是否可以只消除锁并确保并发收集能够正确地完成它们的工作?
最佳答案
这个问题我迟到了将近一年..但以防万一有人发现自己处于与 Matěj Zábský 相似的位置,问问自己:
你能用Dictionary<Tuple<Type1, Type2, Type3>, List<Type4>>
吗?相反?
使用起来要容易得多,并且考虑到哈希表(即字典)是 O(1) 数据结构,具有相当大的常量组件(如果移动到 ConcurrentDictionary
则更是如此)它可能会执行得更快也。它还会使用更少的内存,并且转换为 ConcurrentDictionary
非常简单.
当然如果你需要枚举所有给定的Type2
对于给定的 Type1
关键,嵌套字典可能是要走的路。但这是一个要求吗?
关于c# - 多级 ConcurrentDictionary 仍然是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4944018/