文章目录
- 1、简述
- 2、优化点
- 2.1、内存处理
- 2.1.1、Windows的资源管理器
- 2.1.1.1、大图标模式
- 2.1.1.2、超大图标模式
- 2.1.1.3、其他模式
- 2.1.2、用Qt做的类似资源管理器的软件
- 2.2、滑动处理
- 2.2.1、Windows的资源管理器
- 2.2.2、用Qt做的类似资源管理器的软件
- 2.3、超大数据处理
- 2.4、缩略图生成优化处理
- 2.4.1、视频文件
- 2.4.2、音乐文件与图片文件
1、简述
最近在做一个类似Windows的资源管理器的软件,先测一下资源管理器的文件加载处理过程,先学习一下再进行小小的超越。
我们做的改造主要对以下几点进行优化:
- 内存优化处理
- 滑动优化处理
- 大数据优化处理
- 缩略图生成优化处理
测一下才发现资源管理器这里的内存处理做的有点垃圾,它的大目录加载的处理是真的垃圾。说它垃圾是因为如果机器配置不够会直接把操作系统卡死,内存占用会一直增加,这里我自己的软件做了优化。下面用数据说话吧……
测试用的系统是Win10的操作系统来测试的,测试的操作系统信息如下
2、优化点
2.1、内存处理
2.1.1、Windows的资源管理器
2.1.1.1、大图标模式
4万图片,全部图片加载过程占用500M,加载完初始化大小200M,图片全部加载完差不多占用1.5个G。
2.1.1.2、超大图标模式
4万图片,全部图片加载过程占用500M,加载完初始化大小100多M,图片加载一半左右差不多已经是5G多,普通电脑根本不够它玩的。这台测试机器总共才8G内存,之前为了测试这个把操作系统搞卡死机好几次,这次滑了一半左右就停了,已经占用5G内存了,再来其他软件就没活路了。
2.1.1.3、其他模式
其他模式还没测,有兴趣的可以自己一个个测试下
2.1.2、用Qt做的类似资源管理器的软件
依旧是4万图片的目录,全部图片加载过程占用100M内存,加载完初始化大小160多M,动态加载在160-170M之间。
优化:滑动时,只有在显示区域内的图加载缩略图显示出来,已经加载的缩略图进行释放并用默认图标代替。这样即使快速滑动或者滑轮滚动,内存基本没有变化。
2.2、滑动处理
2.2.1、Windows的资源管理器
实时加载并实时显示。这样说好也可以,因为可以动态显示出部分图片,说不好就是会卡滑动条,数据量一旦起来,Windows资源管理器做加载滑动时卡卡的。
2.2.2、用Qt做的类似资源管理器的软件
这里我做了优化,因为快速滑动的时候没必要实时加载出缩略图。所以在滑动基本稳定后我们再进行缩略图加载。
算法优化:在X毫秒内,连续执行 N次 Y函数时,只执行最后一次的函数调用。
(这里的gif动图犹豫生成的原因比真实效果慢些,对付看)
2.3、超大数据处理
我这里指的超大数据是10w以上的数据。如果用Windows本身的资源管理器,超大图标模式,4W文件的情况全部加载完,8G内存都让他耗完了,就别提超大数据了,直接GG。我们这里的应对措施暂时应用翻页的处理方式,如果不考虑单页可承受内存的影响,最合理的应该是1w数据一页,占用内存如果用我们的处理方式,差不多稳定在100M以下
2.4、缩略图生成优化处理
2.4.1、视频文件
视频文件,Windows采用的是取视频的第10s的帧,不足10s的取最后的帧。这样的话,如果是电视连续剧的话,会导致该电视剧生成的所有缩略图都一样。如果想区分的话,可以用我的方法,取视频中间帧。推荐用ff,大视频文件和小视频文件取第几帧的时间大致一样。
2.4.2、音乐文件与图片文件
音乐和图片缩略图生成和Windows一致。音乐文件的缩略图藏在文件的头信息里面,只有部分mp3格式的文件里面包含此信息。这个和windows原理一致,先读取再生成