【问题标题】:How to chose concurrency level of a concurrent dictionary如何选择并发字典的并发级别
【发布时间】:2015-05-07 21:30:34
【问题描述】:

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

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

concurrencyLevel 越高,理论上可以在ConcurrentDictionary 上同时执行的操作数就越高。但是,随着concurrencyLevel 的增加,调整字典大小等全局操作需要更长的时间。

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

【问题讨论】:

    标签: .net concurrentdictionary


    【解决方案1】:

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

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

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

    【讨论】:

    • 同意分析部分。这确实是唯一的判断方法。
    • 您能解释一下您可以使用哪些工具来分析此问题(即 VS Concurrency Visualizer)。另外,具体来说,我在分析期间寻找什么表明我应该增加/更改 concurrencyLevel?
    • 旧帖子,但 JetBrains DotTrace 是一个很好的剖析产品。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多