首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

兑现文件缓存

2013-08-10 
实现文件缓存我有个程序每次从菜单打开一个界面就需要读取此界面相关文件的,比如我打开界面1111,那么我需

实现文件缓存
我有个程序每次从菜单打开一个界面就需要读取此界面相关文件的,比如我打开界面1111,那么我需要读取文件
1111.xml,打开1112,那么就需要读取文件1112.xml。这样的操作IO很大,我觉得不妥。
我现在想把打开的文件内容记录到内存中,下次打开就直接从内存读取,这样速度就快些。
我的想法是,建立一个QMap<QString, FileCache>,QString是指菜单ID,FileCache是个类,里面的成员变量有访问的文件名字段filename,文件内容QTextStream, 访问次数visits,最后访问时间lastvisittime,等等。
然后,当打开一个界面时,先看QMap里面有没有此界面相关的FileCache,若没有,则从文件读取且写入到QMap中,若有,则再判断是否到达QMap允许的容量个数,比如我们设置100个,那么,当达到100个时,则按照某个规则进行删除(规则很多,就不细说)。若还未达到100个,那么就从QMap中根据菜单ID找到其对于的FileCache,且更新FileCache。

不过以上有几个问题,第一,我不晓得该如何进行变量的设置,也就说FileCache是设计为一个类好些还是结构体好些?还是有QMap是要设计为全局变量吧?如果用单列模式来做呢?还有若FileCache包含了QTextStream成员变量,那么怎么编译都不过啊?很奇怪的。
[解决办法]
1. FileCache类或结构没有本质区别,看自己需要,不过我的话,会这样:QMap<QString, FileCache*>

2. 比较推荐单例模式

3. 母鸡……
[解决办法]
一点建议:
1. 如果单单是存储文件数据的话,估计用个QByteArray都够了,除非你每个xml都几百上千M的;但是如果是存储解析后的xml信息的,就做个类吧
2. 单例可以,设置作为主界面类的一个成员变量都可以
3. 你的类是不是从QObject派生的?其实直接用个QFile读个文件,返回个QByteArray就够了

热点排行