标签:
最近一个项目里遇到加载外部图片导致内存居高不下的问题,通过各种查找总算解决掉了,其实在新版本的FLASH PLayer中已经有了相关的方法。
项目中,加载到文件中的图片以BitmapData类的形式存在,即使remove或者设置为null仍然没用。
帮助里可以看到BitmapData有一个方法,dispose,具体如下:
dispose () 方法
public function dispose():void
语言版本: ActionScript 3.0
运行时版本: Flash Player 9, AIR 1.0, Flash Lite 4
释放用来存储 BitmapData 对象的内存。
对图像调用 dispose() 方法时,该图像的宽度和高度将设置为 0。对此 BitmapData 实例的方法或属性的所有后续调用都将失败,并引发异常。
BitmapData.dispose() 立即释放由实际的位图数据占用的内存(一个位图最多可使用 64 MB 的内存)。使用 BitmapData.dispose() 后,BitmapData 对象不再可用,而且,如果对 BitmapData 对象调用函数,Flash 运行时将引发异常。但是,BitmapData.dispose() 不会将 BitmapData 对象(大约 128 个字节)作为垃圾回收;由实际的 BitmapData 对象占用的内存在垃圾回收器收集 BitmapData 对象时释放。
再结合System类的gc方法,就完全释放内存了,至少我的项目中问题解决了。
gc () 方法
public static function gc():void
语言版本: ActionScript 3.0
运行时版本: AIR 1.0, Flash Player 9.0.115.0, Flash Lite 4
强制执行垃圾回收进程。
仅限于 Flash Player 调试版和 AIR 应用程序。在 AIR 应用程序中,System.gc() 方法仅限在运行于 AIR Debug Launcher (ADL) 中的内容或已安装的应用程序的应用程序安全沙箱中的内容中启用。
不过要注意的是,一定要在图片不用之后再调用,否则会直接不显示了。
标签:
原文地址:http://www.cnblogs.com/lei-1987/p/5555742.html