一直都想知道ACE实现的容器和STL的容器究竟谁更高效。做了一个小小的测试来检验STL hash_map和ACE的hash_map的效率。该测试在Debian Etch 上运行,机器大概是Intel(R) Pentium(R) 4 CPU 2.66GHz。
在系统基本空闲的情况下,建立一个10万2千条大小的hash表,执行同样多次(10万2千次)的查询。本测试只比较查询时间和占用内存大小。因为大多数时候,对hash表来说都是在查询的。总共有四个程序,分别是STL的hash_map,string和ACE的ACE_Hash_Map_Manager_Ex,ACE_CString组合而成。下面是结果每个程序运行三遍的平均结果。程序内存大小,由于还有别的一些东西占用内存,故大小仅供参考,但可从不同程序之间的差异大致看出不同容器的内存占用情况。另顺便把STL的map也放进来了,让大家也参考一下。
程序 |
内存占用大小(KB) |
查询时间(秒) |
STL的map和string
|
13476
|
0.197 |
STL的string和hash_map |
13456 |
0.06 |
STL的hash_map和ACE_CString
|
15104 |
0.07 |
ACE_Hash_Map_Manager_Ex和ACE_CString
| 13361
| 0.99
|
ACE_Hash_Map_Manager_Ex和STL string
| 12676
| 1.21
|
注意:不同的hash函数实现可能导致不同的hash查询速度和内存占用大小。本处对于string都是用STL默认的hash函数。只有ACE_Hash_Map_Manager_Ex和ACE_CString的组合使用的ACE自带的hash函数。
结论:我在网上看到很多人谈到ACE的容器的时候,都是说“据说,ACE的容器比STL的更高效”,从此次测试可以看出,这种说法不果是以讹传讹!可以看出STL自己的hash_map搭配自己的string还是最好的组合。
阅读(2814) | 评论(0) | 转发(0) |