2011-02-17 34 views
0

我目前在C++和Qt中有一個GUI單線程應用程序。加載(從磁盤讀取)需要1分鐘的時間,關閉需要5秒鐘(保存設置,完成連接,...)。使我的桌面應用程序似乎加載/退出更快

我能做些什麼來使我的應用程序看起來更快?

我的第一個想法是讓應用程序的服務器組件完成所有工作,而GUI組件僅用於顯示。通信通過套接字,管道或存儲器映射完成。這似乎是一種矯枉過正的行爲(從開發的角度來看),因爲我的應用程序只被少數人使用。

+1

這個問題相當於「我的程序需要很長時間的工作,我不知道它在做什麼,我該如何讓這個未知的事情變得更快?」你應該問的問題是,「我怎麼知道爲什麼我的程序需要很長時間才能啓動,以及在那段時間內它實際上在做什麼?」 – 2011-02-17 10:30:53

回答

5

的第一步是啓動分析。使用實際的,低開銷的分析工具(例如,在Linux上,您可以使用oprofile),而不是猜測。你的應用程序正在做那一分鐘啓動?這些工作中的任何一個可以推遲到晚些時候,或者完全跳過?

例如,如果您正在加載文檔模板列表,那麼可以推遲,直到用戶告訴您創建新文檔爲止。如果您正在掃描系統以查找字體列表,請從上次啓動加載緩存列表並使用該列表,直到完成更新單獨線程中的字體列表。這些只是一個例子 - 使用一個分析器來找出時間的實際發生位置,然後從最大的時間數字開始攻擊代碼。

在任何情況下,一些更有效的方法來記住:

  • ,直到需要跳過工作。如果您正在爲某些不常使用的功能進行初始化,請跳過它直到實際使用該功能。
  • 推遲工作,直到啓動後。在UI響應時,您可以在單獨的線程上處理很多事情。如果您收集的信息不經常更改,但需要立即執行,請考慮緩存先前運行的值,然後在後臺更新。

爲了您的關機時間,隱藏自己的GUI瞬間,然後再花那五秒鐘的背景關停。只要用戶不注意工作,它可能是瞬時的。

1

您可以在加載時使用顯示有趣的標準技巧。

像許多遊戲現在顯示兩個尖,而他們正在裝載

1

它看起來像我只是在猜測所有這些時間在哪裏被燒燬。 「從磁盤讀取」在我的候選人名單上不會很高。瞭解更多關於真的正在進行。

使用體面的分析器。

+1

從經驗來看,我肯定會猜測磁盤。這是今天電腦唯一真正的慢速部分。創業中的100億業務並不普遍; 10.000磁盤並非如此。 – MSalters 2011-02-17 10:00:06

0

分析是一個給定的,當然。

很可能,您可能會發現I/O很實際 - 讀取您的啓動文件。正如bdonlan所言,推遲工作是一種標準技術。谷歌的「懶惰評估」。

您還可以考慮緩存不會更改的數據。以更快的格式保存緩存,例如二進制文件。如果你碰巧有一個大的靜態數據集被讀入類似數組的東西,這是非常有用的。