WPF性能提升--MSDN學習摘要

關於性能 算法

1、    關於硬件加速編程

一、對於大多數圖形硬件而言,大型圖面是指達到 2048x2048 或 4096x4096 像素大小的圖面。windows

2、    合理的佈局緩存

一、簡單地說,佈局是一個遞歸系統,實如今屏幕上對元素進行大小調整、定位和繪製。網絡

二、集合中的子級數目越多,所需的計算量就越大app

三、使用簡潔的佈局面板,Grid 或 StackPanel 控件提供的功能比 Canvas 控件多不少。 功能大大提升的代價是性能成本也大大提升。工具

四、更新而不替換 RenderTransform。佈局

五、從上到下生成樹。定義和添加元素時,採用自上向下的原則。性能

3、    二維圖形和圖像處理測試

一、使用繪圖(Drawing)和形狀(Shape),Drawing 對象比 Shape 對象結構簡單而且性能特性更爲優良。

二、圖像:a、若是程序須要縮略圖,應該顯示建立縮略圖。WPF會完成大小加載圖像並進行解碼。b、使用BitmapScalingMode.LowQuality屬性通知 WPF 呈現引擎在處理圖像時從質量優化算法切換到速度優化算法。

4、    對象行爲

一、不移除對象的事件處理程序可能會使對象保持活動狀態。對象傳遞給其事件的委託是對該對象的有效引用。 所以,事件處理程序可使對象保持活動狀態的時間超過預期時間。 當對已註冊爲偵聽對象事件的對象執行清理時,在釋放對象前移除委託是很是必要的。 將不須要的對象保持爲活動狀態會增長應用程序內存使用量。 當對象爲邏輯樹或可視化樹的根時更是如此。

二、依賴屬性的性能低於CLR屬性。

三、使用Freezable對象。SolidColorBrush.Freeze()方法。凍結 Freezable 能夠改進其性能,由於它再也不須要因更改通知而消耗資源。凍結的 Freezable 也能夠在線程之間共享,而解凍的 Freezable 則不能。

四、使用虛擬化。使用VirtualizingStackPanel

5、    資源共享

一、不進行復制而共享畫筆;

二、儘量使用靜態資源; <Label Foreground="{StaticResource myBrush}">Label 1</Label>

6、    控件的性能

控件

虛擬化

容器回收

延遲滾動

ComboBox

能夠啓用

能夠啓用

能夠啓用

ContextMenu

能夠啓用

能夠啓用

能夠啓用

DocumentViewer

不可用

不可用

能夠啓用

ListBox

默認

能夠啓用

能夠啓用

ListView

默認

能夠啓用

能夠啓用

TreeView

能夠啓用

能夠啓用

能夠啓用

ToolBar

不可用

不可用

能夠啓用

7、    其它方式

一、配置字體緩存服務以縮短啓動時間;

二、畫筆的不透明度與元素的不透明度,在使用 Brush 設置元素的 Fill 或 Stroke 時,設置 Brush.Opacity 值比設置元素的 Opacity 屬性效果要好。 修改元素的 Opacity 屬性會致使 WPF 建立臨時圖面。

三、避免使用 ScrollBarVisibility=Auto。

8、    啓動時間

  1. 實現初始屏幕。當啓動應用程序到顯示第一個 UI 之間存在不可避免的明顯延遲時,使用初始屏幕可優化感受啓動時間。
  2. 分析啓動代碼。肯定冷啓動慢的緣由。磁盤 I/O 多是一個緣由,但並不是老是它。 一般,應該將外部資源(例如網絡、Web 服務或磁盤)的使用降到最低。在測試以前,驗證沒有其餘正在運行的應用程序或服務使用託管代碼或 WPF 代碼。
  3. 優化模塊加載。使用進程資源管理器 (Procexp.exe) 和 Tlist.exe 等工具可肯定應用程序需加載哪些模塊。 Tlist <pid> 命令顯示進程加載的全部模塊。例如,若是您沒有鏈接到 Web 但看到加載了 System.Web.dll,則應用程序中存在引用此程序集的模塊。請檢查以確保該引用是必需的。若是應用程序有多個模塊,請將它們合併爲一個。 此方法須要的 CLR 程序集加載開銷更少。程序集越少,還意味着 CLR 保持的狀態也越少。
  4. 推遲初始化操做。
  5. 以編程方式設置數據綁定。不要使用 XAML 以聲明方式設置主窗口的 DataContext,而應考慮以編程方式在 OnActivated 方法中對其進行設置。

六、WIN7的SuperFetch功能。Windows Vista 中的內存管理器包含一種稱爲 SuperFetch 的技術。 SuperFetch 分析內存在一段時間中的使用模式,以肯定適合具體用戶的最佳內存內容。 SuperFetch 會持續工做以便始終保持該內容。預提取技術是將數據預先加載到內存中而不分析使用模式。 隨着時間的推移,若是用戶常常在 Windows Vista 上使用 WPF 應用程序,則可能會縮短應用程序的冷啓動時間。

相關文章
相關標籤/搜索