C++性能优化实践(转载&分析)

From:http://www.cppblog.com/sandy/archive/2006/01/05/2448.html

配置文件读写是项目中经常会用到的,如果仅仅是遵从“逐条添加-查找”的方式,当数据量上升的时候[1],很容易导致巨大的时间消耗:SetKeyValue函数所需时间以N*N的方式增长[4]。

为此,根据项目实际情况[2],使用map,将查找时间变成了常数级别[5]。

结论:map和multimap[3] 的作用非常大。

 

[1] 每个数据值都比较小,时间消耗,参见源链接代码。

[2] 不存在相同的section,也没有相同的key。

[3] Ogre中的配置文件基本上也是按照这种方式组织的。

[4] 优化前的代码采用的是“两级链表”结构:在搜索时,先找到section,然后再搜索key,所以,时间上是N*N的(采用的是顺序查找方式)。在优化后,(可以对比前后的数据结构),使用了map类型的find函数,提高了查找效率。

[5] 这里谈谈yathing个人的体会:在以前编写acm程序的时候,我尽量避免使用map。虽然它的“天生有序”,使得它的查找效率很高;但是,在insert一个个map元素的时候,却是比较花时间的!(No Free Lunch)我记得在acm编程中,使用map的代码虽然很简洁,但是给时间上造成的负担,往往令我程序超时。

当然,如果在项目中“插入”(也就是代码中注释的insert操作)不是频繁操作,那么每次操作慢一点无所谓;对于配置文件来说,频繁读取、定位,才是最重要的。

你可能感兴趣的:(C++性能优化实践(转载&分析))