我正在使用并发字典存储大约200万条记录,并想知道将字典的并发级别初始化为什么。
MSDN页面的示例代码中包含以下注释:
concurrencyLevel越高,可以在ConcurrentDictionary上同时执行的理论操作数越高。但是,随着concurrencyLevel的上升,调整字典大小等全局操作会花费更长的时间。
这是我能找到的最好的解释concurrencyLevel的含义,但它仍然很模糊。
我正在使用并发字典存储大约200万条记录,并想知道将字典的并发级别初始化为什么。
MSDN页面的示例代码中包含以下注释:
concurrencyLevel越高,可以在ConcurrentDictionary上同时执行的理论操作数越高。但是,随着concurrencyLevel的上升,调整字典大小等全局操作会花费更长的时间。
这是我能找到的最好的解释concurrencyLevel的含义,但它仍然很模糊。
最重要的是要理解即使你有更多的并发访问 concurrencyLevel
,操作仍然是线程安全的。也就是说,设定 concurrencyLevel
是表现的问题,而不是正确性。
concurrencyLevel
指定可用于映射操作的独立锁的数量。如果你有 n
线程同时访问字典,设置 concurrencyLevel
比......高 n
不会产生任何额外的好处。一般来说,最佳值 concurrencyLevel
但是,由于给定的工作人员不会花费大部分时间访问字典,因此将显着低于工作线程的数量。
分析您的应用程序确实是确定最佳应用程序的唯一方法 concurrencyLevel
。但是,将其设置为预期的工作线程数是一个良好的开端。
最重要的是要理解即使你有更多的并发访问 concurrencyLevel
,操作仍然是线程安全的。也就是说,设定 concurrencyLevel
是表现的问题,而不是正确性。
concurrencyLevel
指定可用于映射操作的独立锁的数量。如果你有 n
线程同时访问字典,设置 concurrencyLevel
比......高 n
不会产生任何额外的好处。一般来说,最佳值 concurrencyLevel
但是,由于给定的工作人员不会花费大部分时间访问字典,因此将显着低于工作线程的数量。
分析您的应用程序确实是确定最佳应用程序的唯一方法 concurrencyLevel
。但是,将其设置为预期的工作线程数是一个良好的开端。