Silverlight性能优化具体方法介绍

开发 开发工具
Silverlight性能优化一般可以通过尽量使用轻量级的控件;在对象动画过程中不要碰触它的Opacity属性;使用CompositionTarget.Rendering 事件启动逐帧动画(循环)等方法来实现。

对于开发人员来说,运用一款工具开进行开发程序的时候,肯定会想尽一切办法来使这款工具的运用效能达到一个更高的境地。那么对于Silverlight的使用也是一样。我们先来看看Silverlight性能优化的具体方法。#t#

Silverlight性能优化1)尽量使用轻量级的控件

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

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

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

Silverlight性能优化3)使用CompositionTarget.Rendering 事件启动逐帧动画(循环)

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

Silverlight性能优化4)尽量使用各种加速与缓存

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

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

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

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

Silverlight性能优化6)将后台工作者(BackgroundWorker)看做您的左膀右臂

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

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

责任编辑:曹凯 来源: 博客园
相关推荐

2009-12-31 14:12:40

Silverlight

2009-12-16 15:04:26

Ruby实现strea

2009-12-01 13:41:49

静态路由设置

2022-01-12 07:48:18

首屏前端性能

2009-11-23 15:10:28

PHP获取当前url

2009-12-01 09:52:40

PHP过滤字符串

2009-11-30 11:24:49

PHP将EXCEL导入

2010-05-12 10:29:51

MySQL数据库

2009-11-24 17:25:00

PHP二维数组排序

2010-07-21 14:33:01

删除telnet

2009-12-29 18:02:26

SilverLight

2011-04-01 13:34:12

zabbix

2009-12-03 14:43:46

phpMyAdmin配

2009-12-29 18:34:21

Silverlight

2009-12-15 13:47:33

Silverlight

2010-04-23 13:53:29

Oracle密码

2009-12-31 17:21:41

Silverlight

2009-12-30 15:08:04

Silverlight

2009-12-25 16:52:57

网络接入控制

2010-02-06 11:19:33

C++获取文件
点赞
收藏

51CTO技术栈公众号