0

問題を考えるのを手伝ってください。Xユーザーのシステムにインストールされているすべてのアプリに関する情報を保存し、定期的に更新する必要がある C++/Qt で記述されたアプリ (と呼びましょう) があります。.desktopLinux では、推奨事項に従ってすべてのファイルを解析するには時間がかかりすぎFreeDesktop.orgます。私のコンピューターでは約 2 ~ 3 秒です。そこで、キャッシュを使用してファイルを操作することにしました。

キャッシングはどのように機能しますか:

(注:アプリ ファイルは、ユーザーのシステムにインストールされているアプリに関する情報を含むファイルです。たとえば、Linux では.desktopファイル、Windows では.lnkファイルなどです。)

  1. 最初に、アプリ ファイルがユーザーのシステムに配置されている場合、ディレクトリのリストがあります (たとえば、Linux ではリストに/usr/share/applicationディレクトリが含まれます)。
  2. 開始すると、そのXリスト内のすべてのフォルダーを調べて、すべてのファイルの「スナップショット」を作成します。スナップショットは、ファイルのフル パスとlast modified時刻を含むレコードのリストである必要があります。次に、Xスナップショット内のすべてのファイルを解析し、必要な情報を想定、appsInformationリストに保存します。
  3. 一定の時間が経過Xすると、そのフォルダー内のファイルの新しいスナップショットを作成します。次に、新しいスナップショットと古いスナップショットを比較し、変更の 3 つのリストを作成addedます。時刻が変更されたすべてのアプリ ファイルmodifiedを含むリスト。リストには、古いスナップショットには存在するが新しいスナップショットには存在しないすべてのアプリ ファイルが含まれますその後、リスト内の新しいファイルからの情報を解析してリストに戻し、リストに従ってリスト内の既存のレコードを変更し、リスト内のファイルと一致するリスト内の既存のレコードを削除します。last modifieddeletedaddedappsInformationappsInformationmodifiedappsInformationdeleted

そのため、ファイル システムの 2 つのスナップショットが必要で、そのうちの 1 つが何らかの形でappsInformationリストに接続されている必要があります。

これが私の質問です。このすべてのアーキテクチャを最適に構築するには、どの方法とツールを使用すればよいでしょうか? その結果、スナップショットでの作業は、すべてのファイルを解析するよりも少なくとも 2 倍速くなるはずです。私はいくつかのアイデアを考えましたが、それらは本当に醜く、リリースしにくいものです。それぞれがファイル情報とレコードQListへのポインターを含むオブジェクトをいくつか使用する必要がありますか? appsInformationまたは、より良いアイデアはありますか?ご協力ありがとうございました。

4

1 に答える 1

1

そもそもポーリングを使用しません。代わりに、コールバック ベースのファイル システム監視ライブラリを使用します。Windows と Linux の両方に既にこれがあります。これらの質問に対する回答を参照してください。

これらのライブラリと共にインストールするコールバックは、通常、どのファイルが変更されたかだけでなく、変更に関する詳細も通知されます。つまり、ファイルが追加、削除、または変更されました。したがって、「変更タイプ」に応じて、.xml の要素を追加/削除/変更できますappsInformationList

于 2013-07-03T12:26:57.917 に答える