sl性能优化

在多个平台和浏览器上进行测试

如果你在为多平台 (e.g. Mac and Windows) 或多浏览器 (e.g. Internet Explorer, FireFox, and Safari)进行程序设计, 记住一定要在这些平台一进行一一测试. 每个平台及浏览器的对于silverlight的表现都会有不同. 特别的, 当你的程序使用了 transparent embedded plug-in backgrounds或你的程序使用了大量的JavaScript你更应该进行彻底的测试.

在进行程序开发的时候将EnableFrameRateCounter = true 设置好

渲染的性能表现和主机上的设置及内容的复杂性有关系 . 建议你将 "settings.EnableFrameRateCounter = true" 设置好,这样在开发过程中将在browser 状态栏中显示帧数,你可以根据这个来调整自己的程序.

尽量在程序中少使用Transparent Background

除非必不得已才使用 transparent background ,因为它将产生很大的性能开销. (transparent 是background 的一个可以设置的值,一般用来隐藏silverlight plug-in控件的背景色,设置完后,plug-in将和HTML页的颜色一样.

Using Silverlight Animations is Faster than Creating your own Per-Frame Animation

It is faster (better performance) to change property values by using Silverlight built-in animations than creating your own per-frame animations using APIs in JavaScript.  The recommended mechanism for manipulating the element tree over time is through the animation system, as this approach is platform and browser independent and the most efficient.

用动画来动态控制Text Size 是要付出很多性能代价的

用动画来动态控制Text Size 是要占用很多系统资源的. 这是因为当 Silverlight 渲染任何text时, Silverlight 使用 "hinting" 来平滑文字图形. 如果你动态的来控制 text size (比如 Transform or FontSize), 那么程序必须不断的来"hinting"文字(即每帧都要做这个工作), 这将是代价很高的而且还有可能会丢"hinting". 如果你的程序需要大量的动态改变文字大小, 你可以使用矢量图来代替这些文字.

Windowless = "True" 是有性能开销的

当你必须使用 Windowless 属性的时候再使用. 它将产生性能开销同时也可能会使动画的播放不流畅.

在你可以使用Visibility的时候,请不要选择 Opacity 

如果你只是简单的想将一个对象隐藏, 那么请使用 Visibility 属性而不要使用 Opacity. 一个设置 Opacity 为 0 的对象仍然将会在以后的使用中进行渲染,虽然你看不见它. 设置 VisibilityCollapsed 为避免这种情况.

Silverlight 使用了 Multi-Core(多核心)来进行渲染和媒体播放

如题,silverlight已经对多核心进行了优化.

当在 Full Screen Mode时, 隐藏那些不需要的Objects

当你的application转到 full screen模式时, 从object tree中隐藏或断开那些不需要对象将是有益的.你可以通过设置  Visibility 属必为Collapsed来达到这一点.

不要使用 Width/Height来控制 MediaElement的大小

避免直接设置MediaElement的width 和 height  , 你应该让media以它本来的大小来进行播放 . 如果你不满意原有的SIZE,最好的办法是你使用工具把源文件再重新编码转换.

不要给 Path Objects设置 Width/Height

当你使用 Path object时, 请不要设置 WidthHeight. 设置 WidthHeight将引起额外的拉伸效果,这将产生性能开销 . 你应该直接使用座标来设置它的形状和位置.

当一个Downloader 完成时, 要将其关联事件解除,并设置为Null

当使用 Downloader object, 在 Completed 事件触发后, 解除 Downloader 的所有事件,然后请设置Downloader 为null.

当JavaScript运行的时候, Plug-In 就不再进行渲染

当JavaScript运行的时候, Plug-In 就不再进行渲染. 一般的,进行一些小的比较在event handlers 中简单调用就能完成的任务,这不属于讨论的范围, 然而, 如果你的程序需要在 JavaScript 纯种中调用一些开销比较大的过程,那么就建议你把这个过程分解成一个个小部分,这样在这些过程产生的间隙中,silverlight还可以有时间进行渲染以此来保持正常的帧率 .

---------------------------------------------------------------------------------------------------------------------------

      在silverlight3中,硬件加速这个特性是由自己来决定的。如果你不想启动硬件加速器,那么你就看不到它的效果。
      你如何来启动它呢?有一个新的参数enableGPUAcceleration,如下:

   

        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2"

            width="100%" height="100%">

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

            <param name="source" value="ClientBin/SilverlightApplication18.xap" />

  </object>

         还有另外一个参数:

enableCacheVisualization

用法:

        你可以通过调节它的on/off来查看硬件优化是否正在被引用。你会发现。没有应用优化的区域是有色彩的(红色),然而,正在应用优化的区域会显示正常的颜色。

       例如,这里有个非常小的例子

Silverlight3的GPU加速器 - jeneate - jeneate的博客

 

      我已经设置了参数enableCacheVisualization为true。而且我还显示了一个没有从硬件加速器中受益的MediaElement。你可以看到它是红色的而且enableCacheVisualization 已经被启动。
     在Silverlight3中,UIElement有一个公共属性CacheMode,它的类型为CacheMode。据我所知,CacheMode只有BitmapCache值。如果我更改我定义的MediaElement,将它的CacheMode设置为BitmapCache,如下:

 

 < Grid.Row="1">

            CacheMode="BitmapCache"

            Margin="10"

            Source="/bear.wmv"

            Stretch="Fill"/>

这时候,效果如图:

Silverlight3的GPU加速器 - jeneate - jeneate的博客

        显示了一个没有高亮红色(指示加速器正在被运行)的视频。在我自己的机器上查看,这是视频非常漂亮。

  • 没有硬件加速器---CPU的使用率大约为20%
  • 有硬件加速器 ---CPU的使用率大约为10%

        注意:在用一个更加复杂的视频时,我发现CPU的使用率大约在50%到80%,设置更多。造成这种结果的因素有很多。所以需要特别注意这一点。

       到现在为止,就我所知,视频加速器只能影响到MediaElement。它并不能影响到你用video(如VideoBrush )绘制的屏幕

 

posted on 2010-04-22 18:02  chuncn  阅读(459)  评论(0编辑  收藏  举报

导航