博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#Hashtable与Dictionary性能
阅读量:5058 次
发布时间:2019-06-12

本文共 1200 字,大约阅读时间需要 4 分钟。

由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性, 并不任何时刻都能相互替代.

[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

几种C#框架提供的数据结构对单值查找的效率比较->

我个人是觉得,无论什么时候,都应该使用Dictionary<K,V>,理由如下:
1、Dic是类型安全的,这有助于我们写出更健壮更具可读性的代码,而且省却我们强制转化的麻烦。这个相信大家都明白。
2、Dic是泛行的,当K或V是值类型时,其速度远远超过Hashtable。这个大家对值类型与引用类型有所了解的话也会明白。
3、如果K和V都是引用类型,如eaglet所测,Hashtable比Dic更快,这里我要指出,eaglet所做的测试是有问题的。原因在于Hashtable与Dic采用的是不同的数据结构。eaglet的“Dictionary 由于在Hashtable基础上封装了一层”这个说法是不对的。

Dictionary 调用 Add 方法之前使用 ContainsKey 方法测试某个键是否存在,否则得到一个KeyNotFoundException。

当程序频繁尝试字典中不存在的键时,使用 TryGetValue 方法来检索值,这种方法是一种更有效的检索值的方法。

具体我也不讲了,因为有人(Angel Lucifer)已经讲得很清楚了,引用如下:

 

Hashtable在指定capacity参数时,它并不只开出capacity个槽的内存空间,而是开出比 capacity / 0.72(默认装填因子) 大的最小素数个槽的空间;而Dic在指定capacity时,是开出 比capacity 大的最小素数个槽的空间。因此可以看到,楼主虽然都指定capacity为10万,而实际上Hashtable的槽的总数远远大于Dic的槽的总数,也就是占用的内存远远大于Dic,因此,如此测试是不公平不公正的,如要公平公正的测试,则应该把Dic的capacity指定为 10万/0.72,请大家再测试其性能。

url:

转载于:https://www.cnblogs.com/tong775131501/p/4107433.html

你可能感兴趣的文章
AOP
查看>>
装饰器(执行原函数前后可以有些操作)常用于设置访问权限
查看>>
【底层原理】高级开发必须懂的"字节对齐"
查看>>
再次复习html的锚点
查看>>
Spring boot 之自动生成API文档swagger2
查看>>
Standard C Episode 12
查看>>
inode满了如何处理
查看>>
Spark SQL with Hive
查看>>
居中没有宽度的元素
查看>>
CrtmpServr 接收Http流程
查看>>
IOS Core Animation Advanced Techniques的学习笔记(五)
查看>>
我在游戏世界中(未完成))
查看>>
placeholder在ie浏览器里不显示的问题解决
查看>>
控制台程序读取WIKI形式的TXT文件并一表格的形式显示在Word中
查看>>
用jquery的prop方法操作checkbox
查看>>
自动化思维
查看>>
Python学习之路-Day1-Python基础
查看>>
jenkins
查看>>
js数组操作大全
查看>>
嵌入在html页面中图像格式的区别与选用
查看>>