請幫我思考一個問題。我有一個用C++/Qt編寫的應用程序(讓我們稱之爲X
)應該存儲和定期更新用戶系統上安裝的所有應用程序的信息。在Linux上,根據FreeDesktop.org
推薦標準解析所有.desktop
文件需要太多時間 - 我的計算機上大約需要2-3秒。所以,我決定使用緩存來處理文件。有關快照文件系統的體系結構解決方案
如何緩存應該工作:
(注意,應用程序文件是包含安裝用戶的系統上的應用程序信息的文件。例如,在Linux上它可能是.desktop
文件,在Windows上。 - .lnk
文件等)
- 在開始時,我們有一個目錄列表時應用程序文件位於用戶的系統(例如,Linux上的列表包括
/usr/share/application
目錄)。 - 由於
X
開始,它會遍歷該列表中的所有文件夾並創建所有文件的「快照」。快照應該是包含文件完整路徑和last modified
次的記錄列表。然後,X
解析快照中的所有文件並保存必要的信息,假設爲appsInformation
列表。 - 經過一段時間後,
X
會爲該文件夾中的文件創建新的快照。然後,它將新快照與舊快照進行比較,並創建三個更改列表:added
列表,其中包含所有應用文件,它們存在於新快照中但不在舊快照中;modified
列表,其中包含全部應用文件與更改last modified
時間;和deleted
列表,其中包含舊快照中存在的所有應用文件,但不包含在新快照中。之後,它解析added
列表中新文件的信息,並將其推回到appsInformation
列表中,根據modified
列表更改appsInformation
列表中已有的記錄,並刪除與deleted
列表中的文件匹配的列表中的現有記錄。
因此,我需要有兩個文件系統快照,其中之一以某種方式連接到appsInformation
列表。
這裏是我的問題:我應該使用什麼方法和工具來構建這個最好的架構?在結果中,使用快照的速度至少應比解析所有文件快兩倍。我想到了一些想法,但他們真的很難和難以釋放。我應該使用幾個對象,每個對象包含文件信息和指向記錄的指針?或者有更好的主意?感謝您的幫助。
非常感謝。 –