WPF性能優化


前言

無人交接的情況下,接手了一個3G大小的WPF和WF的混合項目,長達3周修復了37個BUG以后,終於到了性能優化。這個軟件怎么說呢?着實卡爆,不得已只能絞盡腦汁找文章學習優化,所以有了這篇博文。博文的內容是標准的縫合怪,主要是為了方便查看,不然一篇一篇看過於麻煩,文章的最下方均有原文鏈接,支持原創。

性能分析工具

WPF性能分析工具

WPF提供了一套性能分析工具,使您可以分析應用程序的運行時行為並確定可以應用的性能優化類型。下表列出了Windows SDK工具WPF Performance Suite中包含的性能分析工具:

工具 描述
射孔器 用於分析渲染行為。
可視分析器 用於通過可視樹中的元素來概要分析WPF服務的使用,例如布局和事件處理。

WPF Performance Suite提供了性能數據的豐富圖形視圖。有關WPF性能工具的更多信息,請參見WPF Performance Suite

DirectX診斷工具

DirectX診斷工具Dxdiag.exe旨在幫助您解決與DirectX相關的問題。DirectX診斷工具的默認安裝文件夾是:

~\Windows\System32

運行DirectX診斷工具時,主窗口包含一組選項卡,可用於顯示和診斷與DirectX相關的信息。例如,“系統”選項卡提供有關您的計算機的系統信息,並指定計算機上安裝的DirectX的版本。

屏幕截圖:DirectX診斷工具
DirectX診斷工具主窗口

內存監測軟件

Ants Memory Profiler

下載地址: https://pan.baidu.com/s/1nLF6njntaVgrXVdIaT1mOw 提取碼: phsy

使用方法:https://www.cnblogs.com/jingridong/p/6385661.html

dotMemory

https://www.jetbrains.com/dotmemory/

snoop

官網:https://chocolatey.org/packages/snoop

安裝choco

使用管理員權限打開 Powershell

Set-ExecutionPolicy RemoteSigned
iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex

安裝snoop

choco install snoop --pre

升級

choco upgrade snoop --pre

卸載

choco uninstall snoop --pre

內存優化

內存泄露原因

內存泄露主要原因分析:

  • 靜態引用
  • 未注銷的事件綁定
  • 非托管代碼資源使用等

對於靜態對象盡量小或者不用,非托管資源可通過手動Dispose來釋放。

文章推薦

WPF內存優化

設計優化

規划應用程序性能

實現績效目標的成功取決於您制定績效策略的能力。規划是開發任何產品的第一步。本主題描述了制定良好性能策略的一些非常簡單的規則。

在開始開發任何WPF應用程序之前,必須先制定性能策略。應用程序啟動時間,每幀動畫頻率速率,窗口中允許的最大工作集都是可以提前計划和制定戰略的一些方案。

一旦提出了方案,就可以定義目標並以循環/迭代的方式評估,研究,改進應用程序的性能。

文章推薦

優化WPF應用程序性能

細數改善WPF應用程序性能的10大方法

常用

容易記住的幾種優化方式

  1. 偏愛StaticResources而不是DynamicResources,StaticResources通過查找對已定義資源的引用來為任何XAML屬性屬性提供值。該資源的查找行為與編譯時查找相同。DynamicResources將創建一個臨時表達式,並延遲對資源的查找,直到需要請求的資源值為止。該資源的查找行為與運行時查找相同,這會對性能產生影響。盡可能始終使用StaticResource。
  2. 將ItemsControls綁定到IList而不是IEnumerable,當將ItemsControl綁定到IEnumerable的數據時,WPF將創建類型為IList 的包裝器,這將對第二個對象的創建產生負面影響。而是將ItemsControl直接綁定到IList,以避免包裝對象的開銷。
  3. 避免將數據綁定到Label.Content屬性,如果使用標簽將數據綁定到String屬性,這將導致性能下降。這是因為每次更新String源時,都會丟棄舊的字符串對象,並創建一個新的String。如果Label的內容是簡單文本,則將其替換為TextBlock,然后綁定到Text屬性。
  4. 畫筆上的不透明度而不是元素,如果使用“畫筆”設置元素的“填充”或“描邊”,則最好在“畫筆”上設置“不透明度”,而不是設置元素的“不透明度”屬性。修改元素的“不透明度”屬性時,它可能導致WPF創建臨時曲面,從而導致性能下降。
  5. 使用縮小的圖像尺寸,如果您的應用要求顯示較小的縮略圖,請考慮創建縮小尺寸的圖像。默認情況下,WPF將加載並解碼圖像到其完整尺寸。如果要加載完整的圖像並將它們縮小到ItemsControl等控件中的縮略圖大小,這可能是許多性能問題的根源。如果可能,將所有圖像合並為一個圖像,例如由多個圖像組成的膠片。
  6. 降低BitMapScalingMode,默認情況下,WPF使用高質量的圖像重采樣算法,該算法有時會消耗系統資源,這會導致幀速率下降並導致動畫停頓。而是將BitMapScalingMode設置為LowQuality,以從“質量優化”算法切換為“速度優化”算法。
  7. 在單獨的線程上加載數據,性能問題,UI凍結以及停止響應的應用程序的一個非常常見的來源是如何加載數據。確保您在一個單獨的線程上異步加載數據,以免UI線程超載。在UI線程上加載數據將導致非常差的性能以及最終用戶的整體體驗。每個WPF開發人員都應在其應用程序中使用多線程。

文章推薦

WPF 2019的性能提示

其他的文章

提高WPF UI渲染速度的方法

圖形渲染層


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM