關於性能 算法
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、 控件的性能
控件 |
虛擬化 |
容器回收 |
延遲滾動 |
能夠啓用 |
能夠啓用 |
能夠啓用 |
|
能夠啓用 |
能夠啓用 |
能夠啓用 |
|
不可用 |
不可用 |
能夠啓用 |
|
默認 |
能夠啓用 |
能夠啓用 |
|
默認 |
能夠啓用 |
能夠啓用 |
|
能夠啓用 |
能夠啓用 |
能夠啓用 |
|
不可用 |
不可用 |
能夠啓用 |
7、 其它方式
一、配置字體緩存服務以縮短啓動時間;
二、畫筆的不透明度與元素的不透明度,在使用 Brush 設置元素的 Fill 或 Stroke 時,設置 Brush.Opacity 值比設置元素的 Opacity 屬性效果要好。 修改元素的 Opacity 屬性會致使 WPF 建立臨時圖面。
三、避免使用 ScrollBarVisibility=Auto。
8、 啓動時間
六、WIN7的SuperFetch功能。Windows Vista 中的內存管理器包含一種稱爲 SuperFetch 的技術。 SuperFetch 分析內存在一段時間中的使用模式,以肯定適合具體用戶的最佳內存內容。 SuperFetch 會持續工做以便始終保持該內容。預提取技術是將數據預先加載到內存中而不分析使用模式。 隨着時間的推移,若是用戶常常在 Windows Vista 上使用 WPF 應用程序,則可能會縮短應用程序的冷啓動時間。