Qt程序冷啟動過慢如何解決?

用Qt開發的程序冷啟動(編譯完第一次啟動)比MFC之類的慢很多,放固態里運行也沒多大區別(我的固態比較垃圾但再垃圾也是固態,肯定比機械硬碟強),啟動時和大多數程序相比都有明顯的停頓,大概2~3秒左右,用戶體驗很不好(之前說的是5秒左右,確實太誇張了,我的鍋)。我試過,空白窗口確實可以做到雙擊秒出界面,但只要窗口裡有其他widget(比如QPushButton),不管數量有多少,都會顯著拖慢窗口顯示出來的速度。使用QSplashScreen在編譯後第一次啟動時也比較慢,但第二次及以後啟動就秒出Splash窗口,這樣一來第一次啟動體驗就有點差了,而且不是什麼類型的程序都適合加SplashScreen的。請問各路大神如何能使Qt程序做到幾乎秒出界面?(先不考慮開機自啟之類的。。。)

註:做啟動速度對比實驗時的代碼量很少,總共不超過20行,用的是傳統的widget,沒有用qml,只在mainwindow里創建了幾個pushbutton,release模式編譯,沒有調用調試器,直接雙擊exe運行。

補充:我電腦的硬體配置不差,但同樣的程序在我的機器上啟動就比較慢,在其他機器上就比較快,經提醒可能是我軟體環境有問題,看來跟Qt和代碼都沒關係。


喵喵喵?題主的程序代碼量有多大?有多少個dll要載入?為何我寫的項目從來都是秒開……我指的還是從ide開debug版(沒掛調試器),還不是雙擊release的exe。

該不會把所有代碼都寫在主線程了吧?主線程只跑界面,其他所有邏輯操作和相關初始化全部扔QThread里,沒道理不能秒開的呀。

另外,除非用Qml,否則Qt全程AOT,沒有JIT,沒有解釋執行,不存在冷啟動熱啟動的說法。

哪怕是Qml吧……Qt Qml現在是採用JIT+多線程的,也妥妥的比同技術棧的XXX.js之類的快……


難以想像,你的Qt軟體複雜到什麼程度,要5秒才能顯示出界面。

遇到這種問題別瞎猜,也沒必要問別人。用Visual Studio自帶的Profiler、Intel vTune等等性能剖析工具,分析一下啟動過程,很容易找到瓶頸在哪裡並做針對性的修改。


Qt不至於差勁到你說的這個程序!基本上是代碼的問題。


我這開debug版的WPS才兩秒(固態),老哥你打個log看看時間消耗在哪裡了不就行了???除非你把代碼都拿上來要不然沒辦法解決啊。


估計您有大量的初始化放在了主線程中,可以考慮將一些遍歷等耗時操作放在QtConcurrent::run中初始化


第一:qtcreater就是qt寫的比較大程序,你試試載入一個簡單cpp文件看看啟動時間。

第二:你似乎不會調試。

第三:用腳趾頭想想3秒才能啟動的玩意誰會用,還是做了多少年的gui庫。


推薦閱讀:

QT獲取線程號函數currentThreadId()返回Qt::HANDLE 如何得到QString?
qt窗口之間如何通信或信息共享?
想學QT,是直接QT5還是先學QT4好?
如何選擇C++與QML交互的兩種方式?

TAG:編程 | QtC開發框架 | CC |