這是一篇邪術的文章。 不要跟我說安全的問題。C++ 就是一種在安全邊緣,瘋狂壓榨性能的一種語言。
情景
在公司的某一天,突然接手了一個任務,因爲公司的某個產品提出了一個**(嗯你懂的)需求,需要導入大量的Json的數據,然後解析Json 數據,拼接成map 進入到緩存池中。
問題
我寫了第一個版本,用 C++ Json 庫去解析Json 然後解析成一個多維度的map(就是map
改進
我發現代碼中 使用了大量的map 插入 和 map的取值。對於每個map,如果都拿出來,然後賦值給一個對象。那麼就是消耗了一次拷貝構造。然後你拿着拷貝構造出來的對象,去進行操作,插入回去又是一種消耗。 可是我的對象類型又不一定一樣,這個時候:
用地址
當map插入完成後,人後這個map操作是替換爲主,那麼 你就使用這個邪術好了,
直接將插入後的map中的地址拿出來使用,當然這樣灰常不安全。如果這個時候有另外個線程動了你的map,大概率 隨機crash。
好處
這樣的好處就是, 可以避免大量的拷貝構造,賦值構造,等等等。還可以讓函數變的簡單 易懂,因爲你可以用void 指針扔進去。
例子(後面的文章補)
結果
這個結果導致,1分半 變成了 10s. 當然還有很多技巧能使 C++ 速度變快。
有興趣 可以往下看。