2013-07-01 55 views
0

請幫我思考一個問題。我有一個用C++/Qt編寫的應用程序(讓我們稱之爲X)應該存儲和定期更新用戶系統上安裝的所有應用程序的信息。在Linux上,根據FreeDesktop.org推薦標準解析所有.desktop文件需要太多時間 - 我的計算機上大約需要2-3秒。所以,我決定使用緩存來處理文件。有關快照文件系統的體系結構解決方案

如何緩存應該工作:

(注意,應用程序文件是包含安裝用戶的系統上的應用程序信息的文件。例如,在Linux上它可能是.desktop文件,在Windows上。 - .lnk文件等)

  1. 在開始時,我們有一個目錄列表時應用程序文件位於用戶的系統(例如,Linux上的列表包括/usr/share/application目錄)。
  2. 由於X開始,它會遍歷該列表中的所有文件夾並創建所有文件的「快照」。快照應該是包含文件完整路徑和last modified次的記錄列表。然後,X解析快照中的所有文件並保存必要的信息,假設爲appsInformation列表。
  3. 經過一段時間後,X會爲該文件夾中的文件創建新的快照。然後,它將新快照與舊快照進行比較,並創建三個更改列表:added列表,其中包含所有應用文件,它們存在於新快照中但不在舊快照中; modified列表,其中包含全部應用文件與更改last modified時間;和deleted列表,其中包含舊快照中存在的所有應用文件,但不包含在新快照中。之後,它解析added列表中新文件的信息,並將其推回到appsInformation列表中,根據modified列表更改appsInformation列表中已有的記錄,並刪除與deleted列表中的文件匹配的列表中的現有記錄。

因此,我需要有兩個文件系統快照,其中之一以某種方式連接到appsInformation列表。

這裏是我的問題:我應該使用什麼方法和工具來構建這個最好的架構?在結果中,使用快照的速度至少應比解析所有文件快兩倍。我想到了一些想法,但他們真的很難和難以釋放。我應該使用幾個對象,每個對象包含文件信息和指向記錄的指針?或者有更好的主意?感謝您的幫助。

回答

1

我不會首先使用輪詢。相反,我會使用一些基於回調的文件系統監視庫。在Windows和Linux系統有這個已經,看到這些問題的答案:

你使用這些庫通常不僅被告知哪些文件改變了安裝回調,還有一些關於變化的細節;即文件被添加,刪除或更改。因此,根據「更改類型」,您可以在appsInformationList中添加/刪除/修改元素。

+0

非常感謝。 –