天天看點

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、音樂檔案與圖檔檔案