BitmapCache? 何时以及如何使用?

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

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

/理查德

我在Silverlight 3中找到了解释CacheMode的链接。从链接:[此链接已死。]

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

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

对于绝大多数对象,BitmapCache应该是你在Windows Phone 7上不需要考虑的事情.Wirelight for WP7实现了自动位图缓存元素,这些元素以缓存帮助的方式设置动画(转换,不透明,旋转 – 也许更多,我现在不记得了)。

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

可能有一些边缘情况,即使在Windows Phone上显式设置BitmapCache也很有用,但我不知道它们。 您可以尝试查看MSDN上的Windows Phone性能提示 。

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

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

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