位图缓存?何时以及如何使用?

9

我有一个关于Windows Phone 7 Silverlight应用程序中位图缓存的问题。

什么时候应该使用它?在哪些控件上使用?我是否应该对已经被位图缓存的控件的子控件进行位图缓存?我不确定它是如何工作的,希望能从你们那里得到一些建议。

/Richard

3个回答

7

我找到了这个链接,它解释了Silverlight 3中的CacheMode。从链接中得知:

  • BitmapCache是唯一支持的缓存模式。
  • 缓存应用于元素及其所有子元素。
  • 在混合、变换(平移、拉伸、旋转)场景下应使用BitmapCaching
  • 滥用CacheMode功能可能会影响性能,因此您需要仔细考虑您所做的事情。如果您的可视树交错缓存和未缓存的元素,则实际上会在幕后创建多个渲染表面。未缓存的表面以软件方式呈现,而缓存的表面以硬件方式呈现。如果您可以最小化总渲染表面的数量并让硬件在可能的情况下执行工作,则性能将最佳。
  • 您可以通过将EnableCacheVisualization参数添加到Silverlight插件声明中来确定哪些元素正在被缓存。<param name="EnableCacheVisualization" value="true" />
  • 据我所知,当Silverlight应用程序不处于全屏模式时,Mac上不会发生GPU加速。这显然是Safari插件模型的限制。

我想知道是否可以在WP7上启用EnableCacheVisualization,我正在使用BitmapCache来处理LongListPickerContentPresenter(我使用动态创建的内容填充),如果缓存起作用,那将是很有趣的事情。但根据第3点,您只应在动画UIElement时使用它,而我没有这样做,所以也许我根本不应该使用它!


4

对于大多数对象来说,在Windows Phone 7上,BitmapCache应该是您不需要考虑的东西。Silverlight for WP7实现了元素的自动位图缓存,这些元素以动画方式进行操作,缓存可以帮助它们(例如平移、不透明度、旋转 - 或许还有更多,我现在记不清了)。

当前在桌面PC(或Mac)上的Silverlight并不是很智能,因此您需要按照Praetorian在他的答案中指出的大致指导手动指定CacheMode=BitmapCache。

可能存在一些边缘情况,在Windows Phone上明确设置BitmapCache也是有用的,但我不知道具体情况。您可以尝试查看MSDN上的Windows Phone性能提示


1

从我所看到/阅读的内容来看,如果您要在过渡或动画中使用那些可能很昂贵的对象(如许多子项或复杂布局),则希望使用位图缓存。

通过位图缓存,硬件可以更快速、更流畅地执行过渡和动画。

我认为您只需要将其放置在应用变换或动画的最顶层项目/父项目上?不久后会有人来纠正我,我敢肯定 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接