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

最新文章

  1. 【干货分享】流程DEMO-借款申请
  2. 【JUC】JDK1.8源码分析之ReentrantReadWriteLock(七)
  3. PyCharm 教程(五)断点 调试
  4. MultiSelectComboBox(一)
  5. HTTP中缓存相关
  6. python编码encode和decode
  7. [swustoj 1095] 挖金子
  8. WPF WebBrowser
  9. SGU 218.Unstable Systems
  10. Linux bug 14258279: scheduling clock overflows in 208 days
  11. Mysql字符集修改为UTF8
  12. USACO Section 1.2 Dual Palindromes 解题报告
  13. android studio视频教学
  14. java多线程的(一)-之java线程的使用
  15. 集合之ArrayList的源码分析
  16. Manacher算法解析
  17. mysql递归
  18. mysql----Nested SELECT Quiz
  19. POJ 2987 Firing【最大权闭合图-最小割】
  20. Spring Boot 入门之基础篇(一)

热门文章

  1. jquery on off 方法
  2. Collection集合List、Set
  3. 三种硬件平台运行Laxcus大数据系统的表现
  4. 【Unity Shaders】学习笔记——SurfaceShader(一)认识结构
  5. 【翻译】24款界面精美的免费UI工具包
  6. 【LeetCode】5. Longest Palindromic Substring 最大回文子串
  7. LED驱动简单设计
  8. 利用DataTable快速批量导数据
  9. 洛谷P1828 香甜的黄油 Sweet Butter
  10. ASP.NET MVC 开源项目学习之ProDinner (三)