缓慢的 ConcurrentDictionary.Count 查找

本文介绍 ConcurrentDictionary<TKey,TValue>.Count 的性能见解。

原因

System.Collections.Concurrent.ConcurrentDictionary.Count 导致查找速度缓慢。

性能见解说明

部分 ConcurrentDictionary 方法(例如 ConcurrentDictionary.Count)不是并发的,且会在实际上产生锁定。 请避免频繁调用此方法。 如果需要使用它,可以在代码中使用单独的计数(例如使用 Interlocked.Increment),也可以使用近似计数。

如果需要使用大量 ConcurrentDictionary.Count 方法调用(例如每个请求一个),请不要使用默认构造函数,而是使用允许指定并发值的构造函数。 默认构造函数使用的并发级别等于服务器上的核心数。 请改用较小的数字作为并发级别,然后检查总体内存使用量。

如果不需要考虑线程安全性,ConcurrentDictionary 的成本可能比 Dictionary更高。 因此,检查是否需要使用 ConcurrentDictionary

如何调查警告

在 CPU 使用率工具中,单击“查看源代码”以转到调用树和源行突出显示视图,其中显示了 ConcurrentDictionary.Count 中花费最多时间的位置。 从此处追溯到使用方法的位置,并检查是否可以选择使用其他方法。

另请参阅

使用火焰图识别热路径