Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实现的效果是 根据每分钟 60帧(标准的是一分钟60帧,即一秒一帧来实现动画的呈现),不过这个过程我们不用担心因为是Silverlight自己计算好的来完成一个好的动画。废话不多说,开始看看有哪几种方式可以来对动画进行优化:

一、使用Object标签的maxFramerate属性

该属性的默认值就是60,当然也就是标准的,看看怎么设置

没错,就是这么简单,当value值越小(小于标准的60)动画的速度就越快(因为每一秒的帧数变大了),当值越大则速度越来越慢

    <param name="maxFramerate" value="15"/>

另外,为了达到好的性能,最好少使用透明度,已经动画的文本字体大小,以及使用WindowLess的设置显示Html。

二、硬件加速(GPU加速)

这个听起来很复杂,的确实现真正的GPU是很复杂的做法,不过不用担心,Silverlight中支持了我们对此功能的设置,非常简单

<param name="enableGPUAcceleration" value="true"/>

三、图形的缓存

图形的缓存存在一些限制,仅仅对以下几种操作有效:

1.ScaleTransform一个图形

2.RotateTransform一个图形

3.使用图形的Opacity属性

4.使用图形的Clip属性

首先介绍下,实现图形缓存加速的原理"GPU硬件加速是使用合成缓存将可视元素或元素的可视化树缓存为位图图面的行为。这可能为某些方案带来重大的性能改进。使用缓存合成,您可以在可视元素第一次呈现之后,将其缓存为位图。在将某个对象或对象树缓存为位图之后,当应用程序刷新时,它不再经过呈现阶段,而是只呈现缓存的位图。此类缓存位图交换可以充分利用用户 GPU 中提供的硬件加速功能,这种方法会大大改进某些方案的性能。"

实现缓存的方法:

设置元素的CacheMode属性,其中BitmapCache属性的重点,该值表示缓存中图形相对于原元素的比例,默认值为1,即和元素大小一致,数值越小CPU占用越少,内存占用越少,性能越好,反之则越坏。

           <Button x:Name="cmd" Content="I GROW and SHRINK." Canvas.Top="70" Canvas.Left="10">                 <Button.CacheMode>                     <BitmapCache RenderAtScale="5"></BitmapCache>                 </Button.CacheMode>                 <Button.RenderTransform>                     <ScaleTransform x:Name="scaleTransform"></ScaleTransform>                 </Button.RenderTransform>             </Button>

四、加速测试,在开发过程中可以测试是否起到了加速优化的效果 第一个属性为GPU的加速,后两个是用于在页面上显示当前使用的速率和缓存以及显示内存的一些信息。

            <param  name="EnableGPUAcceleration" value="true"/>             <param  name="enableCacheVisualization" value="true"/>             <param  name="enableFrameRateCounter" value="true"/>

下图显示为使用了三个属性后页面的测试效果:

第一个数字为当前动画的速率;

第二个数字为当前占用内存的字节数;

三四个数字不太理解这个意思。

转自:http://www.cnblogs.com/ListenFly/archive/2011/11/02/2233715.html

Silverlight中动画的性能浅析的更多相关文章

  1. ArcGIS API for Silverlight中专题地图的实现浅析

    原文http://www.gisall.com/html/32/7232-2418.html 专题地图是突出表现特定主题或者属性的地图.常见专题地图类型有唯一值渲染,分类渲染,柱状图,饼状图,点密度图 ...

  2. Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动

    如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...

  3. 通过硬件层提高Android动画的性能

    曾有许多人问我为什么在他们开发的应用中,动画的性能表现都很差.对于这类问题,我往往会问他们:你们有尝试过在硬件层解决动画的性能问题么? 我们都知道,在播放动画的过程中View在每一帧动画的显示时重绘自 ...

  4. CoreAnimation6-基于定时器的动画和性能调优

    基于定时器的动画 定时帧 动画看起来是用来显示一段连续的运动过程,但实际上当在固定位置上展示像素的时候并不能做到这一点.一般来说这种显示都无法做到连续的移动,能做的仅仅是足够快地展示一系列静态图片,只 ...

  5. CSS3中动画transform必须要了解的Skew变化原理

    transform是CSS3中比较安全的动画(对于性能来说),其中有一些动画属性,来执行不同的变化.今天我们来了解skew的变化原理. skew,其实使用的频率不是很高,当然也没有最低.但是往往,一直 ...

  6. Silverlight中的拖拽实现的图片上传

    原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...

  7. 原生JavaScript中动画与特效的实现原理

    现如今,许多页面上均有一些动画效果.适当的动画效果可以在一定程度上提高页面的美观度,具有提示效果的动画可以增强页面的易用性. 实现页面动画的途径一般有两种. 一种是通过操作JavaScript间接操作 ...

  8. Silverlight中图片显示

    silverlight中显示一个图片有很多的中方法,xaml中的image控件或者自定编写程序来生成image控件. silverlight中显示的图片只能是Bitmap, JPG, PNG(64位颜 ...

  9. Silverlight & Blend动画设计系列十一:沿路径动画(Animation Along a Path)

    Silverlight 提供一个好的动画基础,但缺少一种方便的方法沿任意几何路径对象进行动画处理.在Windows Presentation Foundation中提供了动画处理类DoubleAnim ...

随机推荐

  1. 不能使用 snapshot 的解决方式

    http://www.mzone.cc/article/654.html 有两种方法可以解决: 1.第一种方法是在项目的pom文件中进行配置,如下: <repositories> < ...

  2. 对json数据进行类似sql查询

    添加js引用:jsonsql-0.1.js 通过下面列子得到一个json类型的结果 Example: jsonsql.query("select * from json.channel.it ...

  3. [SQL]详解CUBE和ROLLUP区别<使用rollup或cube通过交叉列可产生高级汇总结果集>

    要使用CUBE,首先要了解GROUP BY. 其实CUBE和ROLLUP区别不太大,只是在基于GROUP BY 子句创建和汇总分组的可能的组合上有一定差别,CUBE将返回的更多的可能组合.如果在GRO ...

  4. 解决tomcat默认45s启动超时的问题

    进入工作空间目录下的.metadata\.plugins\org.eclipse.wst.server.core子目录,找到servers.xml文件,编辑它,找到start-timeout这一行,把 ...

  5. (转)log4net的配置详解

    原文地址:http://blog.csdn.net/pfe_nova/article/details/12225349 log4net是一款优秀的第三方日志框架,可以很容易的加载到开发项目中(引用lo ...

  6. OLAP如何实现数据的聚合计算-分析过程

  7. js对象1--杂志

    1.对象数组 var arr = [ ]       //直接量创建 var arr = array()   //通过函数创建 2. 变量与对象 var a = 12;    //变量,不属于谁(默认 ...

  8. C语言程序设计50例(二)(经典收藏)

    [程序11]题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?1.程序分析: 兔子的规律为数列1,1 ...

  9. 飞达资讯App总体介绍及关系架构图

    飞达资讯App总体介绍: 下图为飞达资讯App的关系架构图: 该App关系架构图所需的图片云盘链接地址:http://pan.baidu.com/s/1gfHIe4b 提取密码:x1nr 该App的云 ...

  10. Win2D 官方文章系列翻译 - 处理设备丢失

    本文为个人博客备份文章,原文地址: http://validvoid.net/win2d-handling-device-lost/ “设备丢失”是指 GPU 设备失效无法继续进行渲染的情况.GPU ...