什么是最快的基于字典的类实现?

时间:2010-03-02 12:02:41

标签: c# performance dictionary hashtable

哪一个C#<Key, Value>结构实现具有更好的性能和更高的速度?

P.S.1:我有两个线程,其中一个写入集合,另一个读写入。

P.S.2:关键项是随机数,然后我的访问是随机的。写入和读取操作是同时进行的。 我正在使用哈希表,但我想知道是否有更好的实现,资源使用更少,性能更好?

1 个答案:

答案 0 :(得分:3)

对于自己的分析,有很多选择。我使用过一个免费的探查器,我建议使用EQATEC。还有更多可供选择,其中许多都在this SO question中引用。

至于实施方式,首先考虑的是Dictionary<TKey, TValue>SortedDictionary<TKey, TValue>SortedList<TKey, TValue>。当然,我倾向于猜测Dictionary<TKey, TValue>是最快的,因为它在功能方面是最简单的。但我还没有为了速度而相互测试它们。

请注意,上述类都是通用的,应该在至少一种意义上使它们比HashTable更有效:它们不需要将键和值装箱/取消装箱作为{ {1}},这会导致不必要的内存分配。

需要注意的是,由于您处于多线程场景中,因此您需要注意以某种方式锁定读/写。 (与System.Object不同,上述类不保证对多个读者和作者来说是线程安全的。)在大多数情况下,锁定公共对象可能是最好的选择,而如果您执行更多读取操作则您可能要考虑使用ReaderWriterLockReaderWriterLockSlim(两者都允许在多个同时读取器和单个写入器之间切换)。如果您枚举整个集合,那么无论如何都应该锁定 - 即使使用HashTable