BitmapCache? 何时以及如何使用?
我对windows phone 7 silverlight应用程序中的位图缓存有疑问。
我应该什么时候使用它? 在什么控制? 我应该缓存位图缓存的控件的缓存子节点吗? 我不确定它是如何工作的,从你们那里得到一些建议会很好。
/理查德
我在Silverlight 3中找到了解释CacheMode
的链接。从链接:[此链接已死。]
- BitmapCache是唯一受支持的缓存模式。
- 缓存应用于元素及其所有子元素。
- BitmapCaching应该用于混合,转换(平移,拉伸,旋转)的场景中。
- 滥用CacheModefunction会损害性能,因此您需要真正思考自己在做什么。 如果您的可视树正在交错缓存和未缓存的元素,则实际上会导致在幕后创建多个渲染表面。 未缓存的表面在软件中呈现,缓存的表面在硬件中呈现。 如果您可以最小化渲染表面的总数并使硬件尽可能地工作,那么您的性能将是最佳的。
- 您可以通过将EnableCacheVisualization参数添加到Silverlight插件声明来确定要缓存的元素。
- 据我所知,当Silverlight应用程序未处于全屏模式时,Mac上不会发生GPU加速。 这显然是Safari插件模型的限制。
我想知道是否可以为WP7启用EnableCacheVisualization
,我使用BitmapCache
作为LongListPicker
和ContentPresenter
(我用动态创建的内容填充),知道缓存是否正常工作会很有趣。 但根据第3个子弹,你应该只在你动画UIElement
使用它,我不是,所以也许我根本不应该使用它!
对于绝大多数对象,BitmapCache应该是你在Windows Phone 7上不需要考虑的事情.Wirelight for WP7实现了自动位图缓存元素,这些元素以缓存帮助的方式设置动画(转换,不透明,旋转 – 也许更多,我现在不记得了)。
桌面PC(或Mac)上的Silverlight目前并不那么智能,因此您需要使用Praetorian在其答案中指出的指导手动指定对象上的CacheMode = BitmapCache。
可能有一些边缘情况,即使在Windows Phone上显式设置BitmapCache也很有用,但我不知道它们。 您可以尝试查看MSDN上的Windows Phone性能提示 。
从我所看到/读过的内容来看,如果要在转换或动画中使用它们,您希望对渲染可能很昂贵的对象(如许多子项或复杂布局)使用位图缓存。
通过位图缓存,硬件可以更快/更顺畅地完成过渡+动画。
我认为你只需要将它放在应用变换或动画的最顶层项/父项上? 很快就会有人纠正我,我敢肯定:)