SilverLight内存释放(性能优化)

SilverLight内存释放(性能优化),第1张

概述1、MSDN的性能提示: (1)、插件的呈现性能会因指定的宿主参数和内容的复杂程度而异。建议您在开发过程中将EnableFrameRateCounter属性设置为true。些设置在浏览器的状态栏中显示所呈现的Silverlight内容的每秒帧数(fps),以便您可以微调应用程序。帧速率计数器的格式如下所示: fps:currentFramerate/maxFramerate currentFram

1、MSDN的性能提示:

(1)、插件的呈现性能会因指定的宿主参数和内容的复杂程度而异。建议您在开发过程中将EnableFrameRateCounter属性设置为true。些设置在浏览器的状态栏中显示所呈现的Silverlight内容的每秒帧数(fps),以便您可以微调应用程序。帧速率计数器的格式如下所示:

fps:currentFramerate/maxFramerate

currentFramerate是在没有帧速率上限时根据插件环境中的条件以及插件的报告应该应用的最佳帧速率。可通过framerate初始化参数来配置maxFramerate。maxFramerate默认为24.每个数字都是报告每秒帧数(fps)的值。这些值被解释为表示任何低于该值的数字都是实际显示的帧速率。

(2)、对Silverlight插件使用透明背景会对性能产生很大影响,因此应尽可能避免使用此功能。

(3)、如果设置UIElement的CacheMode,Rendertransform和Opacity更改中的呈现 *** 作将在图形处理单元(GPU)上执行(如果可用)。仅对正在进行转换或应用不透明度更改的对象设置CacheMode非常重要,因为如果不这样,对象将无法双缓存中获益,并且性能会比您不对它执行缓存时差。可以对UIElement设置CacheMode属性以便将该元素(及其子元素)缓存为位图但是执行此 *** 作在某些情况下会降低性能。

(4)、只有在必要时,才将windowless属性设置为true。在无窗口模式下,性能会受到严重影响(例如动画中的撕裂)。由于这个原因,不建议在无窗口模式下进行任何媒体播放。

(5)、如果只想使某个对象单独可见或不可见,应使用Visibility属性而不是Opacity属性。Opacity会导致较高的开销,这是因为仍然对该对象执行命中测试和技术呈现。将Visibility设置为Collapsed可避免这些开销。

(6)、应避免显式设置MediaElement对象的宽度和高度,而是应使媒体元素显示其固有大小。如果需要更改元素的显示大小,最好使用媒体编码工具重新编码为所需大小。

(7)、不要设置Path对象的WIDth和Height属性。设置这些属性将导致额外的拉伸,这会影响性能。而应依靠Path对象的显式设置的坐标来控制其形状和位置,Path将具有“自然”宽度和高度。

(8)、程序代码运行时,插件会停止绘制。通常,如果在事件处理程序中执行很少的任务,这不会成为问题。但是,如果应用程序需要对编程线程执行大量占用cpu资源较多的工作,建议将任务拆分为更小的任务。这样,呈现将能够保持所需的帧速率。

(9)、呈现大量图像时使用 Stretch="Fill" 可以通过将 Stretch 属性设置为 Fill 而非包括 None 在内的其他值而获得更好的性能。使用 Stretch = Fill 时,不会有添加额外边缘的潜在剪辑发生。除 Fill 之外的所有其他类型的拉伸都需要计算布局(例如计算居中)。除非要呈现许多图像,否则,您可能不会注意到差异。

以上是微软对处理性能方面的建设,下面是一位叫alamiye010 的网友朋友的做法,我个人觉得有用,在这儿分享一下:

1)尽量使用轻量级的控件

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

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

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

3)使用CompositionTarget.Rendering 事件启动逐帧动画(循环)

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

4)尽量使用各种加速与缓存

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

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

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

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

6)将后台工作者(BackgrounDWorker)看做您的左膀右臂

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

总结

以上是内存溢出为你收集整理的SilverLight内存释放(性能优化)全部内容,希望文章能够帮你解决SilverLight内存释放(性能优化)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存