逐帧回调示例
该示例演示了逐帧回调动画与storyboard驱动的动画的对比。
运行此示例,将会看到一个带storyboard动画(运行在构图线程)的小蓝方块,和5个按钮:
- Add-添加一个1/8屏幕大小、带逐帧回调动画的矩形
- Dlt-删除最新添加的矩形
- Redraw-P:System.Windows.Interop.Settings.EnableRedrawRegions调试标志开关切换
- Cache-切换是否对应用矩形手工应用位图缓存。默认值为true。
- Hide/Show-切换屏幕底部按钮的可见性的开关。
要测试此示例,请尝试如下操作:
- 添加几个矩形直到蓝色方块和矩形开始卡屏。这是因为设置了手动缓存。因为手动缓存,方块的动画在排列线程执行,而矩形的动画在UI线程执行。两个线程都受到了逐帧绘制矩形的填充率的限制。
- 切换Cache按钮关闭矩形的手动缓存。此时会看到方块的动画开始变得很平滑,但是矩形的动画更加卡屏。这是因为不应用缓存时,UI线程会为每一帧绘制矩形。其间,构图线程 不再处理矩形的纹理所以方块动画变平滑了。当矩形不缓存时,内存中不会保持任何的纹理。每次矩形位置更新时那些像素都会重绘。这些耗资源的操作都通过CPU在UI线程执行。因而,轻型的构图线程能够以60帧/秒的速度更新,即使CPU资源已经被矩形占用尽。
- 继续测试Redraw和Cache按钮。注意重绘区域启用后,如果矩形缓存了,矩形将会出现闪烁。闪烁意味着对象正在被被逐帧重绘。注意这种情况下,方块不在闪烁因为它是被storyboard驱动的,会自动缓存。
备注:WP7性能优化系列到此结束,(0)-(13),共计14篇。感谢大家的支持。