提高WPF性能技巧分享

提高WPF性能技巧分享

ID:44258726

大小:61.58 KB

页数:4页

时间:2019-10-20

提高WPF性能技巧分享_第1页
提高WPF性能技巧分享_第2页
提高WPF性能技巧分享_第3页
提高WPF性能技巧分享_第4页
资源描述:

《提高WPF性能技巧分享》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、WPF的应用可以帮助我们实现许多基于图形界面方面的功能实现。不过在实际使用中,开发人员往往都追求更高性能的使用。在这里就介绍一下有关WPF性能的提高方法。全面介绍WPFUI自动化技术深入探讨WPFUI自动化模型全面探讨WPFUI自动化测试各种WPF命令列表总结WPFCommand概念总结在建立漂亮UI的同时,我们还需要关注应用程序的性能,WPF尤其如此。下面从MS的文档屮总结出了一些有用的性能优化点。在实际编写的过程屮,可以参考。这个Post非完全原创,是根据一些文档总结出来的。1、建立逻辑树的时

2、候,尽量考虑从父结点到子结点的顺序构建。因为当逻辑树的一个结点发生变化吋(比如添加或删除),它的父结点和所有的子结点都会激发Invalidationo我们应该避免不必要的Invalidation。2、当我们在列表(比如ListBox)显示了一个CLR对象列表(比如List)时,如杲想在修改List对象后,ListBox也动态的反映这种变化。此时,我们应该使用动态的ObservableCollection对象绑定。而不是直接的更新ItemSource0两者的区别在丁-直接更新ItemSource会使

3、WPF抛弃ListBox已有的所有数据,然后全部重新从List加载。而使用ObservableCollection可以避免这种先全部删除再重载的过程,WPF性能更高。3、在使用数据绑定的过程屮,如果绑定的数据源是一个CLR对象,属性也是一个CLR属性,那么在绑定的时候对象CLR对象所实现的机制不同,绑定的效率也不同。A、数据源是一个CLR对象,属性也是一个CLR属性。对象通过TypeDescriptor/PropertyChanged模式实现通知功能。此时绑定引擎用TypeDescriptor来反

4、射源对彖。效率最低。B、数据源是一个CLR对象,属性也是一个CLR属性。对象通过INotifyPropertyChanged实现通知功能。此时绑定引擎直接反射源对象。WPF性能稍微提高。C、数据源是一个Dependencyobject,而且属性是一个Dependencyproperty。此吋不需要反射,直接绑定。效率最高。4、访问CLR对象和CLR属性的效率会比访问DependencyObject/DependencyProperty高。注意这里指的是访问,不要和前面的绑泄混淆了。但是,把属性注册

5、为Dependencyproperty会有很多的优点:比如继承、数据绑定和Styleo所以有时候我们可以在实现Dependencyproperty的时候,利用缓存机制来加速访问速度:看下而的缓存例子:1publicstatic2readonlyDependencyPropertyMagicStringProperty=DependencyProperty.Register(nMagicString11,typeof(string),typeof(MyButton),newPropertyMetmd

6、atm(newPropertyInvalidatedCallback(OnMagicStringPropertyInvalidated),newGetValueOverride(MagicStringGetVa丄ueC吕丄丄beck)));3privatestaticvoidOnMagicStringPropertyInvalidated(DependencyObjectd){4//将缓存的数据标识为无效5((MyButton)d)._magicStringValici=false;6}priva

7、testaticobjectMagicStringGetValueCallback(DependencyObjectd){8//调用缓存的访问器來获取值9return((MyButton)d)•MagicString;10}i1//私有的CLR访问器和木地缓存publicstringMagicString{12get{12//在当前值无效时,获取最新的值保存起来if(!_magicStringValid){13_magicString=(string)GetValueBase(MagicStrin

8、gProperty);14_magicStringValid=true;15}16return_magicString;}17set{SetValue(MagicStringProperty,value);18}19}20privatestring_magicString;21privatebool_magicStringValid;另外,因为注册的Dependencyproperty在默认是不可继承的,如果需要继承特性,也会降低Dependencyproperty值刷新的效率。注

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。