2012-02-13 56 views
1

我一直在使用流行的MVVM Light工具包:here來創建我的Windows Phone應用程序,並對模式有疑問。對於創建的每個頁面,我們都會創建一個新的視圖模型,以保持代碼清潔並促進問題的分離。然而,ViewModelLocator的構造函數包含每個視圖模型的實例化。MVVM Light工具包的性能不會受到影響嗎?

的ViewModelLocator的構造一般是這樣的:

public ViewModelLocator() 
    { 
     ////if (ViewModelBase.IsInDesignModeStatic) 
     ////{ 
     //// // Create design time view models 
     ////} 
     ////else 
     ////{ 
     //// // Create run time view models 
     ////} 

     CreateMain(); 
     CreatePage2(); 
     CreatePage3(); 
     CreatePage4(); 
    } 

如果應用程序包含了一堆的頁面,也不會每個實例化視圖模型甚至對那些可能永遠不會被需要的視圖導致性能問題?

我在這裏錯過了什麼嗎?

回答

8

與任何開銷或者對性能的任何關注,它是衡量開銷/問題是什麼是一個好主意。

確實,當通過.Net,C#,Silverlight,XAML,DataBinding和MVVMLight對WP7進行編碼時,您會插入很多「開銷」 - 並且大部分開銷都是爲了編碼器的方便,而不是爲了用戶的好處。但是,WP7 CPU,視頻協處理器,快速RAM和快速SolidState內存都非常快 - 因此有一定的開銷空間,您可以使用這些框架創建令人愉快的響應式WP7應用程序。

通過一切手段擔心性能 - 但它最好是通過測量驅動這些問題,找出你需要優化,或者你需要隱藏背後的一些其他UI功能緩慢。

通常當我衡量,我發現我的性能瓶頸都沒有,我希望...我也發現,總是有取捨 - 例如在你擔心的地方,這種折衷可能是,雖然定位器構建代碼運行速度較慢,但​​後來的查找代碼可以更快地運行 - 所以應用內導航的速度可能會稍微快一些,但啓動時間會略微縮短。

+0

一個字,#perfmatters – RohitWagh 2015-12-29 05:01:50

1

您不必明確創建在構造函數的對象。您可以推遲他們第一次訪問。

public MainPageViewModel MainPage 
{ 
    if(_mainPageViewModel == null) 
    { 
    _mainPageViewModel = CreateMain(); 
    } 
    return _mainPageViewModel; 
} 

通過各種手段測量性能@Stuart說,但它通常是一個好主意,只能創建夠你所需要的。所以推遲創造財產獲得者是最好的。

但是,如果視圖模型的收縮是沉重的,那麼你可以考慮在構造函數中upfrint建設,同時提供一個進度條給用戶。再次取決於,測量性能,分析您的設計以查看最適合您的需求的設計。

+0

由於一噸的傢伙:) – Cranialsurge 2012-02-13 19:39:55

相關問題