我目前在C++和Qt中有一個GUI單線程應用程序。加載(從磁盤讀取)需要1分鐘的時間,關閉需要5秒鐘(保存設置,完成連接,...)。使我的桌面應用程序似乎加載/退出更快
我能做些什麼來使我的應用程序看起來更快?
我的第一個想法是讓應用程序的服務器組件完成所有工作,而GUI組件僅用於顯示。通信通過套接字,管道或存儲器映射完成。這似乎是一種矯枉過正的行爲(從開發的角度來看),因爲我的應用程序只被少數人使用。
我目前在C++和Qt中有一個GUI單線程應用程序。加載(從磁盤讀取)需要1分鐘的時間,關閉需要5秒鐘(保存設置,完成連接,...)。使我的桌面應用程序似乎加載/退出更快
我能做些什麼來使我的應用程序看起來更快?
我的第一個想法是讓應用程序的服務器組件完成所有工作,而GUI組件僅用於顯示。通信通過套接字,管道或存儲器映射完成。這似乎是一種矯枉過正的行爲(從開發的角度來看),因爲我的應用程序只被少數人使用。
的第一步是啓動分析。使用實際的,低開銷的分析工具(例如,在Linux上,您可以使用oprofile),而不是猜測。你的應用程序正在做那一分鐘啓動?這些工作中的任何一個可以推遲到晚些時候,或者完全跳過?
例如,如果您正在加載文檔模板列表,那麼可以推遲,直到用戶告訴您創建新文檔爲止。如果您正在掃描系統以查找字體列表,請從上次啓動加載緩存列表並使用該列表,直到完成更新單獨線程中的字體列表。這些只是一個例子 - 使用一個分析器來找出時間的實際發生位置,然後從最大的時間數字開始攻擊代碼。
在任何情況下,一些更有效的方法來記住:
爲了您的關機時間,隱藏自己的GUI瞬間,然後再花那五秒鐘的背景關停。只要用戶不注意工作,它可能是瞬時的。
您可以在加載時使用顯示有趣的標準技巧。
像許多遊戲現在顯示兩個尖,而他們正在裝載
它看起來像我只是在猜測所有這些時間在哪裏被燒燬。 「從磁盤讀取」在我的候選人名單上不會很高。瞭解更多關於真的正在進行。
使用體面的分析器。
從經驗來看,我肯定會猜測磁盤。這是今天電腦唯一真正的慢速部分。創業中的100億業務並不普遍; 10.000磁盤並非如此。 – MSalters 2011-02-17 10:00:06
分析是一個給定的,當然。
很可能,您可能會發現I/O很實際 - 讀取您的啓動文件。正如bdonlan所言,推遲工作是一種標準技術。谷歌的「懶惰評估」。
您還可以考慮緩存不會更改的數據。以更快的格式保存緩存,例如二進制文件。如果你碰巧有一個大的靜態數據集被讀入類似數組的東西,這是非常有用的。
這個問題相當於「我的程序需要很長時間的工作,我不知道它在做什麼,我該如何讓這個未知的事情變得更快?」你應該問的問題是,「我怎麼知道爲什麼我的程序需要很長時間才能啓動,以及在那段時間內它實際上在做什麼?」 – 2011-02-17 10:30:53