C# <Key, Value>
中的哪一个结构实现具有更好的性能和更高的速度?
P.S.1:我有两个线程,一个写入集合,一个读写集合。
P.S.2:关键项是随机数,然后我的访问是随机的。写入和读取操作是同时进行的。 我正在使用哈希表,但我想知道是否有更好的实现,资源占用更少,性能更好?
最佳答案
要对自己进行分析,有很多选择。我使用过并推荐的一款免费分析器是 EQATEC .还有更多可供选择,其中许多在 this SO question 中被引用。 .
至于实现,首先想到的是 Dictionary<TKey, TValue>
, SortedDictionary<TKey, TValue>
和 SortedList<TKey, TValue>
.当然,我会倾向于猜测 Dictionary<TKey, TValue>
是最快的,因为它在功能方面是最简单的。但我从未对它们进行过速度对比测试。
请注意,上述类都是通用的,应该使它们比 HashTable
更高效至少在某种意义上:它们不需要将键和值装箱/拆箱为 System.Object
,这会导致不必要的内存分配。
还有一点需要注意,因为您处于多线程场景中,所以您需要注意以某种方式锁定您的读/写操作。 (与 HashTable
不同,上面的类不能保证对多个读者和一个作者是线程安全的。)在大多数情况下锁定一个公共(public)对象可能是你最好的选择,而如果你执行的读取多于写入你可能想考虑使用 ReaderWriterLock
或 ReaderWriterLockSlim
(两者都允许在多个同时读取器和单个写入器之间切换)。如果您正在枚举 集合,那么无论如何您都应该锁定——即使使用 HashTable
。 .
关于c# - 最快的基于字典的类实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2362911/