缓慢的 ConcurrentDictionary.Count 查找
本文介绍 ConcurrentDictionary<TKey,TValue>.Count 的性能见解。
原因
System.Collections.Concurrent.ConcurrentDictionary.Count
导致查找速度缓慢。
性能见解说明
部分 ConcurrentDictionary
方法(例如 ConcurrentDictionary.Count
)不是并发的,且会在实际上产生锁定。 请避免频繁调用此方法。 如果需要使用它,可以在代码中使用单独的计数(例如使用 Interlocked.Increment
),也可以使用近似计数。
如果需要使用大量 ConcurrentDictionary.Count
方法调用(例如每个请求一个),请不要使用默认构造函数,而是使用允许指定并发值的构造函数。 默认构造函数使用的并发级别等于服务器上的核心数。 请改用较小的数字作为并发级别,然后检查总体内存使用量。
如果不需要考虑线程安全性,ConcurrentDictionary
的成本可能比 Dictionary
更高。 因此,检查是否需要使用 ConcurrentDictionary
。
如何调查警告
在 CPU 使用率工具中,单击“查看源代码”以转到调用树和源行突出显示视图,其中显示了 ConcurrentDictionary.Count
中花费最多时间的位置。 从此处追溯到使用方法的位置,并检查是否可以选择使用其他方法。