2013-08-16 28 views
1

比方說,我有一個大的XAML頁面。在這個頁面上有幾十個文本框,按鈕等,並且這些控件需要根據各種條件(權限,視圖模型狀態等)進行顯示/隱藏/修改。兩種可能的方法來設置視覺過渡:綁定或視覺狀態方法更適合性能?

  1. 使用可視狀態管理器; bind the state transitions到視圖模型
  2. 綁定控件屬性到它們各自的視圖模型的屬性,使用轉換器在適用情況下(布爾到可視性,字符串到顏色等)

我的問題性質:純粹從性能角度(速度和內存佔用)來看,其中一種或另一種方法顯然更好?第二種方法是使用綁定加載頁面,可以權衡它嗎?或者差異可能微不足道?

回答

1

我沒有測試或基準來證明它,但推理如下表明,視覺狀態方法應該更快。

對於結合情形:

  • 每個從視圖結合導致被觸發的事件處理程序,每次PropertyChanged上升。
  • 必須執行這些處理程序中的每一個時間任意查看模型屬性更改。
  • 同樣,當您將視圖模型屬性更改爲更新視圖的配置時,全部爲必須運行處理程序的每個屬性更改。

的視覺狀態的場景現在沒有這些處理程序的流失通過:

  • 的VisualStateManager沒有處理,所以不需要的時候它不消耗任何CPU(它忽略「的PropertyChanged」,或者在最糟糕的情況下,只有一個偵聽器連接到「CurrentState」屬性)。
  • 要觸發視覺狀態,只需要運行附加的Storyboard - PropertyChanged不會被引發(除了可能最多隻有一次,如上所述),因此所有處理程序都不需要多次運行。

使用視覺狀態管理器的性能似乎明顯好於設置多餘的視圖到視圖模型綁定。


編輯約翰Gossman也noted(很久以前),該綁定可以是沉重的,並且可以開始在大型的應用程序消耗過多的內存。在鏈接的文章中,他聲稱通過用一個靜態回調替換所有綁定節省了100MB。

相關問題