本节的目的只有一个:提升性能!

首先给出msdn

关于WPF性能优化及提升的文章目录地址:

http://msdn.microsoft.com/zh-cn/library/aa970683.aspx

关于Silverlight性能优化及提升的文章目录地址:

http://msdn.microsoft.com/zh-cn/library/cc189071(VS.95).aspx

这些内容之前已经有很多朋友贴出过,我就不细说了。下面才是本文真正的精华:我的深刻体会,在实际开发中,如何最有效的实现产品性能质的提升。

1)尽量使用轻量级的控件

这在WPF中表现得极为明显,让我记忆最为深刻的就是FormattedTextTextBlockLabel3个控件,从左至右性能消耗越多,往往习惯了随便拖控的朋友刚接触WPF时一看到熟悉的Label就拖它一个出来,FormattedText就不说了,TextBlock拥有与Label几乎一样的功能,因此希望看过本文的朋友注意了,WPF开发中尽量选择轻量级的控件。而由于SilverlightWPF的子集,所以它的控件几乎都是经过浓缩与优化的,因此只需特别注意布局控件的选择;Canvas是性能较好且易于使用的布局控件,本文强力推荐。

2)在对象动画过程中不要碰触它的Opacity属性

举个最简单的例子,如果一个物体在做水平动画移动,此过程中你为它添加了一个鼠标悬停事件,事件内容为修改它的Opacity属性为半透明,然而当你运行程序后却会发现当你把鼠标停在正在移动的该物体上时,会导致该物体运动的短暂不平滑(类似跳帧),这就是因为直接修改元素的 Opacity 属性会迫使系统创建一个临时的 Surface,这个过程是需要消耗一定性能的,切记。

3)使用CompositionTarget.Rendering 事件启动逐帧动画(循环)

    实现动画的方式有多种,如果您需要实现高密度的基于画面刷新的动画,那么建议使用CompositionTarget.Rendering 事件。并且注意了下面才是关键,在Silverlight中您需要非常默契的限制好参数MaxFrameRate,它可以根据客户电脑配置及时时的性能消耗调节画面的刷新率,相当于您的动画机器保姆。我个人的建议,将MaxFrameRate设置在45-60这个段内,这样最接近您液晶显示器的刷新率(有人说将之设置为1000会使动画极其流畅;没错,您的目的是达到了,但是将导致您的CPU疯狂的运做,我想这不是您想要的结果吧),在繁忙时即不会过度消耗性能,又能让您得到清晰且流畅的视觉享受。

4)尽量使用各种加速与缓存

WPF中大家可以通过降低图片的质量以换取性能的提升;在Silverlight中可以启动EnableGPUAcceleration然后通过设置各Uelement对象的CacheMode="BitmapCache"来实现GPU加速支持(此方法目前存在于3.0版本中,并且倍受争议)。

WPF/Silverlight应用程序为了让用户得到较好的交互体验,均会使用大量的图形、媒体与动画,目前的个人电脑配置1G+内存都算低端了,因此大家不妨多考虑利用空间换时间,将这些资源尽量的缓存,每次调用时首先检索是否存在于缓存中,然后才考虑重新加载。这给频繁的资源素材切换提供了快速且可靠的通道,消耗的仅仅是闲置无用的一点点内存而已。

5)适当的时候使用关联属性将给您带来意外的惊喜

绑定关联属性(DependencyObject)是最具效率的事情,无论是WPF还是Silverlight;定义好带回调方法的关联属性,仅当关联属性被修改后才通知界面更新,这才是关联属性最有性能的使用方式。但是,如果您乱用或过度使用关联属性,将导致整体性能的大幅度降低,其实一些普通的对象属性是完全可以用CLR属性代替的,这即为从细节中抽离出性能原理。

6)将后台工作者(BackgroundWorker)看做您的左膀右臂

BackgroundWorker是从Winform年代即存在的一个伟大控件,使用它配合界面的Dispatcher进行跨线程的后台异步委托是兼具性能与友好体验的处理方式。大家不妨在头疼大量数据处理的时候,将BackgroundWorker视为您的左膀右臂,您会发现过程原来是可以这么简单的。

目前暂时先写这6点建议吧,如果有不对或不妥处,还望大家指正。同时大家应该详细阅读本文开头呈现的两个msdn地址中关于WPF/Silverlight性能提升的提示,只要您都做到了,我相信任何产品都能通过您的手发挥出极致的性能。

WPF/Silverlight
作者:深蓝色右手
出处:http://alamiye010.cnblogs.com/
本系列目录及源码下载:点击进入(欢迎加入WPF/Silverlight小组 WPF/Silverlight博客团队)
本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面显著位置给出原文连接,否则保留追究法律责任的权利。
posted on 2009-08-29 18:48  深蓝色右手  阅读(8676)  评论(11编辑  收藏  举报