滤镜和动态位图卸载

避免使用滤镜,包括经过 Pixel Bender 处理的滤镜。

尝试尽量减少使用滤镜效果,包括通过 Pixel Bender 在移动设备中处理的滤镜。将滤镜应用于显示对象时,运行时将在内存中创建两个位图。其中每个位图的大小与显示对象相同。将第一个位图创建为显示对象的栅格化版本,然后用于生成应用滤镜的另一个位图:

查看完全大小图形
应用滤镜时内存中的两个位图

当修改滤镜的某个属性时,内存中的两个位图都将更新以创建生成的位图。此过程涉及一些 CPU 处理,这两个位图可能会占用大量内存。

Flash Player 10.1 和 AIR 2.5 在所有平台上引入一种新的滤镜行为。如果滤镜在 30 秒内没有进行修改,或者将其隐藏或置于屏幕之外,将释放未过滤的位图占用的内存。

此功能可节省所有平台上的滤镜占用的一半内存。以应用模糊滤镜后的文本对象为例。在这种情况下,文本用于简单装饰,不会进行修改。30 秒后,将释放内存中未过滤的位图。如果文本隐藏 30 秒或置于屏幕之外,将会产生同样的效果。修改滤镜的某个属性后,将重新创建内存中未过滤的位图。此功能称为动态位图卸载。即使进行了这些优化,在使用滤镜时仍要谨慎小心;在对它们进行修改时,仍要求大量 CPU 或 GPU 处理。

最佳做法是,尽可能使用通过创作工具(例如 Adobe® Photoshop®)创建的位图来模拟滤镜。避免在 ActionScript 中使用运行时创建的动态位图。使用外部创作的位图可帮助运行时减少 CPU 或 GPU 负载,特别是当滤镜属性不随时间更改时。如果可能,在创作工具中创建位图所需的任何效果。然后,可以在运行时中显示该位图,而无需对它进行任何处理,这样速度要快得多。