天天看点

Qt开发 之 Windows资源管理器模仿 并 小超越

文章目录

  • ​​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的操作系统来测试的,测试的操作系统信息如下

Qt开发 之 Windows资源管理器模仿 并 小超越

2、优化点

2.1、内存处理

2.1.1、Windows的资源管理器

2.1.1.1、大图标模式

4万图片,全部图片加载过程占用500M,加载完初始化大小200M,图片全部加载完差不多占用1.5个G。

Qt开发 之 Windows资源管理器模仿 并 小超越

2.1.1.2、超大图标模式

4万图片,全部图片加载过程占用500M,加载完初始化大小100多M,图片加载一半左右差不多已经是5G多,普通电脑根本不够它玩的。这台测试机器总共才8G内存,之前为了测试这个把操作系统搞卡死机好几次,这次滑了一半左右就停了,已经占用5G内存了,再来其他软件就没活路了。

Qt开发 之 Windows资源管理器模仿 并 小超越

2.1.1.3、其他模式

其他模式还没测,有兴趣的可以自己一个个测试下

Qt开发 之 Windows资源管理器模仿 并 小超越

2.1.2、用Qt做的类似资源管理器的软件

依旧是4万图片的目录,全部图片加载过程占用100M内存,加载完初始化大小160多M,动态加载在160-170M之间。

优化:滑动时,只有在显示区域内的图加载缩略图显示出来,已经加载的缩略图进行释放并用默认图标代替。这样即使快速滑动或者滑轮滚动,内存基本没有变化。

Qt开发 之 Windows资源管理器模仿 并 小超越

2.2、滑动处理

2.2.1、Windows的资源管理器

实时加载并实时显示。这样说好也可以,因为可以动态显示出部分图片,说不好就是会卡滑动条,数据量一旦起来,Windows资源管理器做加载滑动时卡卡的。

2.2.2、用Qt做的类似资源管理器的软件

这里我做了优化,因为快速滑动的时候没必要实时加载出缩略图。所以在滑动基本稳定后我们再进行缩略图加载。

算法优化:在X毫秒内,连续执行 N次 Y函数时,只执行最后一次的函数调用。

(这里的gif动图犹豫生成的原因比真实效果慢些,对付看)

Qt开发 之 Windows资源管理器模仿 并 小超越

2.3、超大数据处理

我这里指的超大数据是10w以上的数据。如果用Windows本身的资源管理器,超大图标模式,4W文件的情况全部加载完,8G内存都让他耗完了,就别提超大数据了,直接GG。我们这里的应对措施暂时应用翻页的处理方式,如果不考虑单页可承受内存的影响,最合理的应该是1w数据一页,占用内存如果用我们的处理方式,差不多稳定在100M以下

2.4、缩略图生成优化处理

2.4.1、视频文件

2.4.2、音乐文件与图片文件