2012-02-13 136 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

相关问题