C++ 性能邪術(如果使用map 提高你的C++ 程序的性能)

這是一篇邪術的文章。 不要跟我說安全的問題。C++ 就是一種在安全邊緣,瘋狂壓榨性能的一種語言。

情景

在公司的某一天,突然接手了一個任務,因爲公司的某個產品提出了一個**(嗯你懂的)需求,需要導入大量的Json的數據,然後解析Json 數據,拼接成map 進入到緩存池中。

問題

我寫了第一個版本,用 C++ Json 庫去解析Json 然後解析成一個多維度的map(就是map),然後根據這個map 去合併(Merge)到緩存中的大map中。開心的敲了2天,出來了。
測試第一版本
30W的條數。進入到系統 總共消耗了,1分30秒。
好了,那個產品灰常灰常 不滿意。改!!!

改進

我發現代碼中 使用了大量的map 插入 和 map的取值。對於每個map,如果都拿出來,然後賦值給一個對象。那麼就是消耗了一次拷貝構造。然後你拿着拷貝構造出來的對象,去進行操作,插入回去又是一種消耗。 可是我的對象類型又不一定一樣,這個時候:

用地址

當map插入完成後,人後這個map操作是替換爲主,那麼 你就使用這個邪術好了,
直接將插入後的map中的地址拿出來使用,當然這樣灰常不安全。如果這個時候有另外個線程動了你的map,大概率 隨機crash。

好處

這樣的好處就是, 可以避免大量的拷貝構造,賦值構造,等等等。還可以讓函數變的簡單 易懂,因爲你可以用void 指針扔進去。

例子(後面的文章補)

結果

這個結果導致,1分半 變成了 10s. 當然還有很多技巧能使 C++ 速度變快。
有興趣 可以往下看。

發佈了5 篇原創文章 · 獲贊 1 · 訪問量 1705
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章