在建立漂亮
ui的同時,我們還需要關注應用程式的效能,
wpf尤其如此。下面從
ms的文件中總結出了一些有用的效能優化點。在實際編寫的過程中,可以參考。這個
post
非完全原創,是根據一些文件總結出來的。
1、建立邏輯樹的時候,盡量考慮從父結點到子結點的順序構建。因為當邏輯樹的乙個結點發生變化時(比如新增或刪除),它的父結點和所有的子結點都會激發
invalidation
。我們應該避免不必要的
invalidation。2
、當我們在列表(比如
listbox
)顯示了乙個
clr物件列表(比如
list
)時,如果想在修改
list
物件後,
listbox
也動態的反映這種變
化。此時,我們應該使用動態的
observablecollection
物件繫結。而不是直接的更新
itemsource
。兩者的區別在於直接更新
itemsource
會使wpf
拋棄listbox
已有的所有資料,然後全部重新從
list
載入。而使用
observablecollection
可以避免這種先全部刪除再過載的過程,效率更高。
3、在使用資料繫結的過程中,如果繫結的資料來源是乙個
clr物件,屬性也是乙個
clr屬性,那麼在繫結的時候物件
clr物件所實現的機制不同,繫結的效率也不同。
a、資料來源是乙個
clr物件,屬性也是乙個
clr屬性。物件通過
typedescriptor/propertychanged
模式實現通知功能。此時繫結引擎用
typedescriptor
來反射源物件。效率最低。
b、資料來源是乙個
clr物件,屬性也是乙個
clr屬性。物件通過
inotifypropertychanged
實現通知功能。此時繫結引擎直接反射源物件。效率稍微提高。
c、資料來源是乙個
dependencyobject
,而且屬性是乙個
dependencyproperty
。此時不需要反射,直接繫結。效率最高。
4、訪問
clr物件和
clr屬性的效率會比訪問
dependencyobject/dependencyproperty
高。注意這裡指的是訪問,不要和
前面的繫結混淆了。但是,把屬性註冊為
dependencyproperty
會有很多的優點:比如繼承、資料繫結和
style
。所以有時候我們可以在實現
dependencyproperty
的時候,利用快取機制來加速訪問速度:看下面的快取例子:
另外,因為註冊的
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
組合在一起效率會更高。看下面的兩種寫法,後一種效率高。a、
b、 10
、任與上面
textdecorations
有關,顯示超連結的時候,盡量只在
ismouseover
為true
的時候顯示下劃線,一直顯示下劃線的**高很多。
11、在自定義控制項,盡量不要在控制項的
resourcedictionary
定義資源,而應該放在
window
或者級。因為放在控制項中會使每個例項都保留乙份資源的拷貝。
12、如果多個元素使用相同的
brush
時,應該考慮在資源定義
brush
,讓他們共享乙個
brush
例項。13
、如果需要修改元素的
opacity
屬性,最後修改乙個
brush
的屬性,然後用這個
brush
來填充元素。因為直接修改元素的
opacity
會迫使系統建立乙個臨時的
su***ce。14
、在系統中使用大型的
3d su***ce
時,如果不需要
su***ce
的hittest
功能,請關閉它。因為預設的
hittest
會占用大量的
cpu時間進行計算。
uielement
有應該i****testvisible
屬性可以用來關閉
hittest
功能。
依然是浮雲。。。
WPF 效能優化
wpf windows presentation foundation 是微軟推出的基於windows的使用者介面框架,執行在 net framework 3.0及以上版本。wpf是基於directx引擎的,支援gpu硬體加速,在不支援硬體加速時也可以使用軟體繪製。儘管wpf有諸多優點,有時我們還是...
WPF 效能優化 14 點
建立漂亮 ui 時需要關注應用程式的效能,wpf 尤其如此。以下是從 ms 文件中總結出的一些關鍵的效能優化點,實際編寫中可備參考。1 建立邏輯樹時,盡量考慮從父結點到子結點的順序構建。因為當邏輯樹的乙個結點發生變化時 比如新增或刪除 它的父結點和所有的子結點都會激發 invalidation。程式...
閒話WPF之二六(WPF效能優化點)
在建立漂亮ui的同時,我們還需要關注應用程式的效能,wpf尤其如此。下面從ms的文件中總結出了一些有用的效能優化點。在實際編寫的過程中,可以參考。這個post非完全原創,是根據一些文件總結出來的。1 建立邏輯樹的時候,盡量考慮從父結點到子結點的順序構建。因為當邏輯樹的乙個結點發生變化時 比如新增或刪...