BitmapCache?何时以及如何使用?

时间:2011-01-17 18:25:55

标签: c# silverlight windows-phone-7

我对windows phone 7 silverlight应用程序中的位图缓存有疑问。

我什么时候使用它?在什么控制?我应该位缓存位图缓存的控件的子缓存吗?我不确定它是如何工作的,从你们那里得到一些建议会很好。

/理查德

3 个答案:

答案 0 :(得分:6)

我在Silverlight 3中找到this link解释CacheMode。从链接: [这个链接已经死了。]

  • BitmapCache是​​唯一受支持的缓存模式。
  • 缓存应用于元素及其所有子元素。
  • BitmapCaching应该用于混合,转换(平移,拉伸,旋转)的场景。
  • 滥用CacheMode功能可能会影响性能,因此您需要真正思考自己在做什么。如果您的可视树交错缓存和未缓存的元素,则实际上会导致在幕后创建多个渲染表面。未缓存的表面在软件中呈现,缓存的表面在硬件中呈现。如果您可以最大限度地减少渲染表面的总数并让硬件尽可能地工作,那么您的表现将是最佳的。
  • 您可以通过将EnableCacheVisualization参数添加到Silverlight插件声明来确定要缓存的元素。 <param name="EnableCacheVisualization" value="true" />
  • 据我所知,当Silverlight应用程序未处于全屏模式时,Mac上不会发生GPU加速。这显然是Safari插件模型的限制。

我想知道是否可以为WP7启用EnableCacheVisualization,我使用BitmapCache表示LongListPickerContentPresenter(我使用动态创建的内容填充)知道缓存是否有效会很有趣。但根据第3个子弹,你应该只在你动画UIElement时使用它,我不是,所以也许我根本不应该使用它!

答案 1 :(得分:4)

对于大多数对象来说,BitmapCache应该是你在Windows Phone 7上不需要考虑的事情。用于WP7的Silverlight实现了以缓存帮助的方式动画的元素的自动位图缓存(翻译,不透明度,旋转 - 也许更多,我现在不记得了。)

桌面PC(或Mac)上的Silverlight目前并不那么智能,因此您需要使用Praetorian在其答案中指出的指导手动在对象上手动指定CacheMode = BitmapCache。

可能存在边缘情况,即使在Windows Phone上显式设置BitmapCache也很有用,但我不知道它们是否随便。您可以尝试查看Windows Phone Performance Tips on MSDN

答案 2 :(得分:1)

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

通过位图缓存,硬件可以更快/更顺畅地完成过渡+动画。

你只需要把它放在你应用变换或动画的最顶层项目/父项目上?有人会很快纠正我,我敢肯定:)