哪一个C#<Key, Value>
结构实现具有更好的性能和更高的速度?
P.S.1:我有两个线程,其中一个写入集合,另一个读写入。
P.S.2:关键项是随机数,然后我的访问是随机的。写入和读取操作是同时进行的。 我正在使用哈希表,但我想知道是否有更好的实现,资源使用更少,性能更好?
答案 0 :(得分:3)
对于自己的分析,有很多选择。我使用过一个免费的探查器,我建议使用EQATEC。还有更多可供选择,其中许多都在this SO question中引用。
至于实施方式,首先考虑的是Dictionary<TKey, TValue>
,SortedDictionary<TKey, TValue>
和SortedList<TKey, TValue>
。当然,我倾向于猜测Dictionary<TKey, TValue>
是最快的,因为它在功能方面是最简单的。但我还没有为了速度而相互测试它们。
请注意,上述类都是通用的,应该在至少一种意义上使它们比HashTable
更有效:它们不需要将键和值装箱/取消装箱作为{ {1}},这会导致不必要的内存分配。
需要注意的是,由于您处于多线程场景中,因此您需要注意以某种方式锁定读/写。 (与System.Object
不同,上述类不保证对多个读者和作者来说是线程安全的。)在大多数情况下,锁定公共对象可能是最好的选择,而如果您执行更多读取操作则您可能要考虑使用ReaderWriterLock
或ReaderWriterLockSlim
(两者都允许在多个同时读取器和单个写入器之间切换)。如果您枚举整个集合,那么无论如何都应该锁定 - 即使使用HashTable
。