首页 > 代码库 > c# Dictionary跟Hashtable的对比
c# Dictionary跟Hashtable的对比
c#里不支持动态对象, 无法像AS3一样定义一个动态的对象, 添加动态的属性。
例如像AS3里 要传递一系列参数, 临时对象的话,通常会用
var o:Object = {id:"1",name:"aaa"};
在c#里,字典系统的构建之前已经试用了Dictionary来充当参数的临时载体, 但是看了itween的插件后, 使用的是Hashtable来充当。
于是对 Dictionary 跟 Hashtable 2者进行了实验。 时间以ms为单位。
对比1: 构建对象。
循环100k次,每次循环分别以Dictionary,Hashtable构建一个临时对象。
3个参数:180:210
6个参数:219:302
9个参数:252:366
小结: 构建Dictionary比Hashtable会稍微快一些, 但是Dictionary是string类型, 真实情况中如果需要转类型, 消耗时间可能会比Hashtable更高。
对比2:遍历对象。
循环100k次, 遍历所有属性。
以6个参数为条件: Dictionary耗时74, Hashtable耗时200.
小结: 遍历Dictionary比Hashtable快不少, 而且Hashtable遍历时是object类型,如果是使用在语言包参数里, 还要考虑转为字符串的消耗。
对比3:查找。
2者都是平均是7~10ms 相差无几。
总结:
Dictionary虽然内部实现也是HashTable 但是运行中Dictionary效率还是更高一些。项目运行中效率应该不会相差很大。
Dictionary适合用于语言包的配置, 因为它的类型是确定的, 不需要再转一次, 效率也比Hashtable高。
Hashtable的key value都是object, 如果是用来做字典系统时充当临时对象比较合适,但是也必须是二进制反序列化为对象时,如果是解析CSV等文本时还是试用Dictionary比较好。
c# Dictionary跟Hashtable的对比