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操作)不是頻繁操作,那麼每次操作慢一點無所謂;對於配置文件來說,頻繁讀取、定位,纔是最重要的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章