WP7 App性能优化(3):隐藏与显示对象

WP7应用程序中有两种方法可以在屏幕上隐藏对象:使用P:System.Windows.UIElement.Visibility属性(可见性)或使用P:System.Windows.UIElement.Opacity属性(透明度)。理解两种技术的实现机制将更便于在应用程序中优化场景转换的性能。 

Visibility属性

当设置一个元素的P:System.Windows.UIElement.Visibility属性(可见性)为Collapsed时,Silverlight不会在内存中保持该元素的任何视图数据,并且不会对元素做任何其他处理。因而,当通过将元素的Visibility设置为Visible,将元素重新显示到屏幕上时,必须在视图树中重新绘制该元素的视图。 

Opacity属性与位图缓存

当启用位图缓存时,可以通过操作元素的P:System.Windows.UIElement.Opacity(透明度)属性来控制元素显示/隐藏以提高程序性能。启用位图缓存的方法是设置UI元素的CacheMode属性为T:System.Windows.Media.BitmapCache。位图缓存允许UI元素在首次渲染后将其视图数据缓存为位图。之后再次显示元素时就可以绕过渲染图形的过程,直接显示缓存的位图。编程中应避免在没有启用位图缓存的情况下操作Opacity属性,因为这会降低程序的性能。

当设置一个启用位图缓存的UI元素的Opacity为0时,Silverlight将会在内存中保存一个该元素的显示位图。当Opacity被重新设置为一个非0值时,将会应用标准的填充率。 

在Visibility 和Opacity之间选择

一般,通过使用Opacity属性并启用位图缓存来提高应用程序性能。但是某些情况下使用Visibility 属性可以取得更好的性能,例如应用程序中包含多个复杂的视图时。必须根据具体情况评估每种技术的性能。可以尝试在Visibility 和Opacity间切换以检测性能。 

隐藏对象示例

该示例允许你分别尝试设置Visibility 和Opacity属性以检测哪个在程序中有更好的性能。

下载示例代码

运行此示例,你将看到一个待动画的蓝色正方形,一个带动画的红色正方形,和150个矩形。另外还有以下按钮:

  • Opac x% - 设置矩形的Opacity(透明度) 为指定百分比.

  • Cache – 启用/禁用矩形的位图缓存。默认为启用。

  • Collapse/Visible – 切换矩形的 Visibility 属性值. 默认值为Visible.

要测试该示例,可尝试以下操作:

  • 通过切换矩形的Visibility和改变其Opacity来控制矩形在屏幕上是否显示。你会注意到,相对于切换Visibility属性,通过改变Opacity控制时,矩形的显示速度更快。而且,当Opacity为非0值时,动画运行的慢些。这是因为150个矩形调整填充率所致。
  • 在禁用位图缓存的情况下操作矩形。你会注意到动画更加平滑,因为矩形无需再调整填充率。此时,你也会注意到,通过设置Opacity或Visibility来控制已经没有什么不同。这是因为在禁用位图缓存的缓存时,无论通过Opacity或Visibility控制,矩形都会重绘。

Ff967560.1d28a864-3691-42a8-a3e6-142642243cf0(en-us,VS.92).png

你可能感兴趣的:(性能优化)