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

标签 c# performance dictionary hashtable

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/

相关文章:

c# - 如何在 Linq 输出列表中将字节数组转换为图像

java - 字符数组与字符串 : which is better for storing a set of letters

arrays - Swift:追加到字典中随机返回

c# - 在 WPF 中模拟按键

c# - 如何使用正则表达式匹配字符串中的多个单词?

c# - 如何使用 Exchange Web 服务发送包含 text/plain 和 text/html 的多部分电子邮件?

android - 如何在我的 Android 应用程序中找到消耗移动数据传输 (MB) 的内容?

c++ - 分配函数值和不分配给变量之间的速度差异

dictionary - 如何在 Dict of Dicts 上使用 Julia map ?

java - java中的 map 问题