問題を考えるのを手伝ってください。X
ユーザーのシステムにインストールされているすべてのアプリに関する情報を保存し、定期的に更新する必要がある C++/Qt で記述されたアプリ (と呼びましょう) があります。.desktop
Linux では、推奨事項に従ってすべてのファイルを解析するには時間がかかりすぎFreeDesktop.org
ます。私のコンピューターでは約 2 ~ 3 秒です。そこで、キャッシュを使用してファイルを操作することにしました。
キャッシングはどのように機能しますか:
(注:アプリ ファイルは、ユーザーのシステムにインストールされているアプリに関する情報を含むファイルです。たとえば、Linux では.desktop
ファイル、Windows では.lnk
ファイルなどです。)
- 最初に、アプリ ファイルがユーザーのシステムに配置されている場合、ディレクトリのリストがあります (たとえば、Linux ではリストに
/usr/share/application
ディレクトリが含まれます)。 - 開始すると、その
X
リスト内のすべてのフォルダーを調べて、すべてのファイルの「スナップショット」を作成します。スナップショットは、ファイルのフル パスとlast modified
時刻を含むレコードのリストである必要があります。次に、X
スナップショット内のすべてのファイルを解析し、必要な情報を想定、appsInformation
リストに保存します。 - 一定の時間が経過
X
すると、そのフォルダー内のファイルの新しいスナップショットを作成します。次に、新しいスナップショットと古いスナップショットを比較し、変更の 3 つのリストを作成added
します。時刻が変更されたすべてのアプリ ファイルmodified
を含むリスト。リストには、古いスナップショットには存在するが新しいスナップショットには存在しないすべてのアプリ ファイルが含まれます。その後、リスト内の新しいファイルからの情報を解析してリストに戻し、リストに従ってリスト内の既存のレコードを変更し、リスト内のファイルと一致するリスト内の既存のレコードを削除します。last modified
deleted
added
appsInformation
appsInformation
modified
appsInformation
deleted
そのため、ファイル システムの 2 つのスナップショットが必要で、そのうちの 1 つが何らかの形でappsInformation
リストに接続されている必要があります。
これが私の質問です。このすべてのアーキテクチャを最適に構築するには、どの方法とツールを使用すればよいでしょうか? その結果、スナップショットでの作業は、すべてのファイルを解析するよりも少なくとも 2 倍速くなるはずです。私はいくつかのアイデアを考えましたが、それらは本当に醜く、リリースしにくいものです。それぞれがファイル情報とレコードQList
へのポインターを含むオブジェクトをいくつか使用する必要がありますか? appsInformation
または、より良いアイデアはありますか?ご協力ありがとうございました。