WPF 效能優化 14 點

2021-05-02 02:29:45 字數 1561 閱讀 6362

建立漂亮 ui 時需要關注應用程式的效能,wpf 尤其如此。以下是從 ms 文件中總結出的一些關鍵的效能優化點,實際編寫中可備參考。

1、建立邏輯樹時,盡量考慮從父結點到子結點的順序構建。因為當邏輯樹的乙個結點發生變化時(比如新增或刪除),它的父結點和所有的子結點都會激發 invalidation。程式應該避免不必要的 invalidation。

2、當在列表(比如 listbox)顯示了乙個 clr 物件列表(比如 list)時,若想在修改 list 物件後,listbox 也動態的反映這種變化,應該使用動態的 observablecollection 物件繫結,而不是直接更新 itemsource。二者區別在於直接更新 itemsource 會使 wpf 拋棄 listbox 已有的所有資料,然後全部重新從 list 載入;而使用 observablecollection 可以避免這種先全部刪除再過載的過程,效率更高。

3、在使用資料繫結的過程中,繫結實現的機制不同,繫結的效率也不同:

4、訪問 clr 物件和 clr 屬性的效率會比訪問 dependencyobject / dependencyproperty 高,注意這裡指的是訪問,不要和前面的繫結混淆;但把屬性註冊為 dependencyproperty 會有很多的優點,比如繼承、資料繫結和 style。另外,因註冊的 dependencyproperty 預設不可繼承,則繼承特性也會降低 dependencyproperty 值重新整理的效率。註冊 dependencyproperty 屬性時,應該把 defaultvalue 傳遞給register 方法的引數來實現預設值的設定,而不是在建構函式中設定。

5、使用元素 textflow 和 textblock 時,若不需要 textflow 的某些特性,就應該考慮使用效率更高的 textblock。

6、在 textblock 中顯式的使用 run 命令比不使用 run 命名的**要高。

7、在 textflow 中使用 uielement(比如 textblock)所需的代價要比使用 textelement(比如 run)的代價高。

8、把 label(標籤)元素的 contentproperty 和乙個字串(string)繫結的效率要比把字串和 textblock 的 text 屬性繫結的效率低。因為 label 在更新字串時會丟棄原來的字串,全部重新顯示內容。

9、在 textblock 塊使用 hyperlinks 時,把多個 hyperlinks 組合在一起效率會更高。

10、顯示超連結時盡量只在 ismouseover 為 true 的時候顯示下劃線,一直顯示下劃線的代價相比較要高很多。

12、如果多個元素使用相同的 brush 時,應該考慮在資源定義 brush,讓他們共享乙個 brush 例項。

13、若需修改元素的 opacity 屬性,應使用乙個有同樣效果的 brush  來填充元素。因為直接修改元素的 opacity 會迫使系統建立乙個臨時的 su***ce。

14、在系統中使用大型的 3d su***ce 時,若不需要 su***ce 的 hittest 功能就關閉之。因為預設的 hittest 會占用大量的 cpu 時間進行計算。uielement 有 i****testvisible 屬性可以用來關閉 hittest 功能。

閒話WPF之二六(WPF效能優化點)

在建立漂亮ui的同時,我們還需要關注應用程式的效能,wpf尤其如此。下面從ms的文件中總結出了一些有用的效能優化點。在實際編寫的過程中,可以參考。這個post非完全原創,是根據一些文件總結出來的。1 建立邏輯樹的時候,盡量考慮從父結點到子結點的順序構建。因為當邏輯樹的乙個結點發生變化時 比如新增或刪...

WPF 效能優化

wpf windows presentation foundation 是微軟推出的基於windows的使用者介面框架,執行在 net framework 3.0及以上版本。wpf是基於directx引擎的,支援gpu硬體加速,在不支援硬體加速時也可以使用軟體繪製。儘管wpf有諸多優點,有時我們還是...

WPF效能優化點 出自《 》

在建立漂亮 ui的同時,我們還需要關注應用程式的效能,wpf尤其如此。下面從 ms的文件中總結出了一些有用的效能優化點。在實際編寫的過程中,可以參考。這個 post 非完全原創,是根據一些文件總結出來的。1 建立邏輯樹的時候,盡量考慮從父結點到子結點的順序構建。因為當邏輯樹的乙個結點發生變化時 比如...