| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11302 人关注过本帖
标题:STL效率初探(关键代码慎用STL)
取消只看楼主 加入收藏
jalor
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-12-15
收藏
 问题点数:0 回复次数:1 
STL效率初探(关键代码慎用STL)

想在工程里使用STL,但一直怀疑STL的效率,所以作了一下简单的测试,结果很让我吃惊。

测试方法:
用std::map与自己实现的CHashMap进行比较,分别插入并查询10000个键值

结果:
Release编译 Debug编译
std::map耗时 CHashMap耗时 std::map耗时 CHashMap耗时
插入10000个键值 0.018923秒 0.000421秒 0.161889秒 0.001955秒
查询10000个键值 0.001435秒 0.000233秒 0.061445秒 0.001808秒

结论:
在Release编译下,std::map在插入键值时速度比CHashMap慢了50倍,查询则慢了7倍!开始我很怀疑这个数据,但重复测试多次后,结果仍然一样。我又将std::map改为std::hash_map,结果还在一样(有细微差别,可忽略)。
以前看过很多文章,均建议使用STL,并且不要企图超越STL,我想这些建议应该是针对STL的通用性、与平台无关性,但就效率而言,STL并非最佳选择!
如果工程中的关键代码对效率要求极高,我觉得在这种地方要慎用STL。初学者不能被大量的STL赞歌所误导了,如果对某一模块的效率没有把握,最好的方法就是做测试,用数据说话。

另外:
我也是刚开始用STL,不知以上对std::map、std::hash_map的测试是否得当,请各位大侠不赐教。致少有一点我现在是迷惑的:std::map/std::hash_map不需要初始化容器的大小,我想它的内部实现是根据插入键值的多少自动分配容器大小,这势必会影响效率。我试着先往std::map/std::hash_map里插入10000个键值,然后清空,我认为这时它应该已分配敢足够的容器,然后再去测试插入10000的键值的时间,结果耗时依然不变!这就有点奇怪了!为什么std::map/std::hash_map的插入操作这么慢??

[此贴子已经被作者于2006-12-15 11:13:29编辑过]

搜索更多相关主题的帖子: STL 效率 std 初探 关键 
2006-12-15 11:10
jalor
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-12-15
收藏
得分:0 
没想到还有朋友回这个贴子!
zsyddl的测试结果有些地方我看得不是很理解,比如“基本都是在0.000044-0.000090之间”,是单次还是10000次?
我今天又测了一下(硬件:3G Hz,512M RAM)
提准备好10000个键值对,做10000次插入,再做10000次查询,结果如下:
CHashMap插入:1.800000 毫秒
CHashMap查询:1.700000 毫秒

std::hash_map插入:42.100000 毫秒
std::hash_map查询:7.000000 毫秒

std::map插入:33.500000 毫秒
std::map查询:12.100000 毫秒

与我06年测的结果有出入,可能测试环境还是变了,不过明显的是STL的hash_map、map的效率是有问题
2008-11-24 14:28
快速回复:STL效率初探(关键代码慎用STL)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017375 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved