如何选择并发字典的并发级别

How to chose concurrency level of a concurrent dictionary

我正在使用一个并发字典来存储大约 200 万条记录,想知道将我的字典的并发级别初始化为什么。

MSDN 页面在其示例代码中有以下注释:

The higher the concurrencyLevel, the higher the theoretical number of operations that could be performed concurrently on the ConcurrentDictionary. However, global operations like resizing the dictionary take longer as the concurrencyLevel rises.

这是我能找到的最好的解释 concurrencyLevel 含义的内容,但它仍然非常模糊。

要了解的最重要的一点是,即使您的并发访问比 concurrencyLevel 多,操作仍然是线程安全的。也就是说,设置 concurrencyLevel 是性能问题,而不是正确性问题。

concurrencyLevel 指定可用于映射操作的独立锁的数量。如果您有 n 个线程并发访问字典,将 concurrencyLevel 设置为高于 n 将不会产生任何额外的好处。一般来说,concurrencyLevel 的最佳值将明显低于工作线程的数量,因为给定的工作线程不会将大部分时间花在访问字典上。

分析您的应用程序确实是确定最佳 concurrencyLevel 的唯一方法。不过,将其设置为预期的工作线程数是一个好的开始。