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

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

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

渲染的性能表现和主机上的设置及内容的复杂性有关系 . 建议你将 "settings.EnableFrameRateCounter = true" 设置好,这样在开发过程中将在

尽量在程序中少使用Transparent Background

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. 

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

用动画来动态控制Text Size 是要占用很多系统资源的. 这是因为当 Silverlight 渲染任何text时, Silverlight 使用 "hinting" 来平滑文字图形. 如果你动态的来控制 text size (比如 Transform or FontSize), 那么程序必须不断的来

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的大小

避免直接设置

不要给 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来查看硬件优化是否正在被引用。你会发现。没有应用优化的区域是有色彩的(红色),然而,正在应用优化的区域会显示正常的颜色。

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

sl性能优化

 

      我已经设置了参数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"/>

这时候,效果如图:

sl性能优化

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

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

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

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

 

相关文章:

  • 2022-02-17
  • 2021-10-05
  • 2021-08-06
  • 2022-03-08
  • 2021-09-01
  • 2021-05-03
猜你喜欢
  • 2021-06-25
  • 2021-06-29
  • 2021-05-16
  • 2021-08-20
  • 2021-10-14
  • 2022-12-23
  • 2022-01-09
相关资源
相似解决方案