我使用一个并发字典来存储大约200万条记录,并且想知道如何初始化我的字典的并发级别。
MSDN页面在其示例代码中有以下注释:
concurrencyLevel越高,可以在ConcurrentDictionary上并发执行的理论操作数就越多。然而,像调整字典大小这样的全局操作会随着concurrencyLevel的增加而花费更长的时间。
这是我所能找到的解释concurrencyLevel含义的最好方法,但它仍然非常模糊。
发布于 2015-05-07 21:37:21
最重要的是,即使您拥有比concurrencyLevel更多的并发访问,操作仍然是线程安全的。也就是说,设置concurrencyLevel是一个性能问题,而不是正确性问题。
concurrencyLevel指定可用于映射操作的独立锁的数量。每个锁都与散列空间的不同子集相关联,因此访问给定的元素需要持有特定的锁。这意味着一个线程的访问可能会阻塞另一个线程的访问,即使并发访问的数量远远低于concurrencyLevel。增加锁的数量可以降低锁竞争的概率,但增加了必须获取所有锁的操作成本(检查集合作为一个整体的操作成本,如Count、IsEmpty或Values,以及需要调整表大小的Add() )。
分析应用程序实际上是确定最佳concurrencyLevel的唯一方法。不过,将其设置为预期的工作线程数是一个好的开始。
https://stackoverflow.com/questions/30112025
复制相似问题