公司的一款項目,在迭代開發階段,忽然發現運行速度愈來愈慢,界面切換卡頓時間在2秒以上.通過和某個不卡版本的對比,驚奇的發現程序二進制都如出一轍,就幾個圖片資源和腳本不同.通過差很少一天的排查,發現是新加的splash程序影響了主程序的速度-.-測試
由於主程序設計的緣由,啓動大概須要10秒左右,爲了避免在黑的X界面等過久,爲了界面的友好,咱們獨立作了個splash程序,用於在主程序啓動以前顯示友好提示界面,splash程序的生命週期是20秒,以後將本身退出.然而奇怪的是就是這個splash程序,即時在徹底退出以後,主程序的響應速度也會慢上不少,切換界面須要卡頓2秒以上...,百思不得其解,對於操做系統而言,進程是互相獨立的,而兩個程序又沒有資源上的訪問衝突,即時splash程序寫的再爛,在退出以後系統也會回收相應的資源,理論上不會對主程序形成任何影響.優化
通過組內討論和思考後,我把問題定位在Qt庫的問題,公司以前一直使用的是Qt4.6.3版本的庫(爲何用這個版本的庫也是有歷史緣由的),爲了驗證想法,我先用SDL寫了個替代的splash程序測試,發現果真主程序就恢復正常了,而後再編譯了個4.8.4版本的庫替換進去,果真用原來的splash也不卡了,主程序的響應速度也比4.6.3快了一大截-.-操作系統
果真是Qt庫自己的bug,這也就解釋了爲何獨立的兩個進程會互相影響.爲何用Qt4.6.3這個圖像運算沒MMX優化的老版本也是由於以前踩太高版本的一個坑.咱們有幾款系統只有一個屏幕,須要主程序和FLASH之間不斷切換,結果Qt4.7以上的版本在切換的過程當中,有概率出現白屏的現象,可是進程仍是在運行.以前也是排查了好久才發現是Qt庫的問題,我猜想是幾個程序對OpenGL的調用致使顯卡資源鎖住了.沒辦法才把Qt版本退回到了4.6.3(這個版本不會白屏,可是圖形效率奇低,甚至連防抖處理都沒,美工作的圖片毛邊明顯).設計
最終決定這款產品上最新的4.8.7,由於這款產品不須要單屏切換,只是不知道以前的白屏問題修復沒有.生命週期