把类的所有数据成员用哈希表来替换,代价是多少?

    解释一下标题先。一般地,访问对象的某个数据成员都是用“对象名.数据成员名”的形式,但若要动态的决定访问哪个数据成员,就得使用哈希表,一种可能的访问形式是“ 对象名.getDataMember("数据成员名")  ”,这个很好实现,用一个哈希表类映射,但重点不是怎么实现,而是这样的代价有多高?

   

    首先我对普通的数据成员访问形式做了时间的测试,被测试的是一条赋值语句,等号左边是一个局部变量(实现声明好的),右边是一个对象的数据成员的引用。我没有简单地将这条语句用for执行N次,因为可能每一次循环"for"的代码的执行所占用的时间和那条赋值语句在同一个数量级上;当然我也不可能把这条语句copy N 份执行,若要copy 100000份,估计我得花上10天时间不停的按Ctrl + C / Ctrl + V;所以我在for中放置了数百条该语句,为了确保"for"的代码的执行时间在一次循环中已经很小了,我进行了4次试验,分别在for中放置了100、200、300、400条该语句,最后发现"for"的代码的执行时间确实可以忽略了。就这样,我测出了平均一条该对普通数据成员访问所用的时间,大致为0.164E-6毫秒/条(Intel Core 2 Duo T7250 2.00G,2.5G RAM ,C#,后同)。

 

    接下来是用哈希表来间接访问“数据成员”的测试。一开始,我以为哈希表的初始容量、实际大小会影响到查询的时间,于是我分别对这两个变量进行了对照实验,结果是都不会有影响,这一点我很纳闷。先不管了,测试的结果是0.11E-3毫秒/条。另外随便补充一点,就是向哈希表中插入一对“键/值”的时间复杂度为O(1),大致为0.115ms。

 

    可见“代价”还是不小的。但是也不能这样就做下结论说用哈希表来间接访问“数据成员”不可取,因为还不知道在你的程序中,访问数据成员所消耗的时间所占的比例是不是最大的,也就是说要看这条语句是不是性能的瓶颈,若不是瓶颈,可以考虑为了实现某些功能而牺牲一点性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值