【发布时间】:2013-06-28 19:41:37
【问题描述】:
请帮助我思考一个问题。我有一个用 C++/Qt 编写的应用程序(我们称之为X),它应该存储并定期更新有关用户系统上安装的所有应用程序的信息。在 Linux 上,根据FreeDesktop.org 建议解析所有.desktop 文件需要太多时间——在我的计算机上大约需要 2-3 秒。所以,我决定使用缓存来处理文件。
缓存应该如何工作:
(注意,app 文件 是一个包含有关安装在用户系统上的应用程序信息的文件。例如,在 Linux 上它可能是 .desktop 文件,在 Windows 上 - .lnk 文件,等等)
- 一开始,当 app 文件 位于用户系统上时,我们有一个目录列表(例如,在 Linux 上,该列表包括
/usr/share/application目录)。 -
X启动时,它会遍历该列表中的所有文件夹并创建所有文件的“快照”。快照应该是包含文件完整路径和last modified时间的记录列表。然后,X解析快照中的所有文件并将必要的信息保存在假设appsInformation列表中。 - 经过一定时间后,
X在该文件夹中创建文件的新快照。然后,它将新快照与旧快照进行比较,并创建三个更改列表:added列表,其中包含新快照中存在但旧快照中不存在的所有 应用程序文件;modified列表,包含所有 app 文件 更改了last modified时间;和deleted列表,其中包含旧快照中存在但新快照中不存在的所有应用程序文件。之后,它会从added列表中的新文件中解析信息并将其推送回appsInformation列表,根据modified列表更改appsInformation列表中已有的记录,并删除appsInformation列表中的现有记录匹配deleted列表中的文件。
所以,我需要有两个文件系统快照,其中一个以某种方式连接到appsInformation 列表。
这是我的问题:我应该使用什么方法和工具来构建所有这些架构最好?因此,使用快照应该比解析所有的速度至少快两倍 文件。我想过一些想法,但它们真的很丑陋且难以发布。我应该使用几个QLists 的对象,每个对象都包含一个文件信息和一个指向appsInformation 记录的指针吗?还是有更好的主意?感谢您的帮助。
【问题讨论】:
标签: architecture