c# - 多级 ConcurrentDictionary 仍然是线程安全的吗?

标签 c# .net .net-4.0 concurrency parallel-extensions

我有这样定义的四级数据结构:

Dictionary<Type1, Dictionary<Type2, Dictionary<Type3, List<Type4>>>>

整个事情都封装在一个类中,该类也保持线程安全。目前它只是在读取/操作数据时锁定整个集合(读取比写入更常见几个数量级)。

我正在考虑将 Dictionary 替换为 ConcurrentDictionaryListConcurrentBag (它的项目不必订购)。

如果我这样做,我是否可以只消除锁并确保并发收集能够正确地完成它们的工作?

最佳答案

这个问题我迟到了将近一年..但以防万一有人发现自己处于与 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/

相关文章:

c# - 固定长度的正则表达式数字模式

c# - 在多包八达通作业中选择最新的包版本

c# - 如果它存在而不是数据库,我如何缓存对象并从内存中读取?

c# - MVC/MVP winforms 应用程序示例(重要)

.net - WPF Aero Glass DPI 设置不匹配

c# - 搜索多列 ListView C#

c# - 这个 ToArray() 实现如何更优化?

c# - RibbonControl 正在拉伸(stretch)图像

c# - 加载插件 DLL 文件, "The invoked member is not supported in a dynamic assembly."

c# - 如何以编程方式添加 DataTrigger