首页 > 代码库 > 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的对比