Flash内存优化心得
2012-09-08 15:18
141 查看
1. 节约内存
sprite 对象与MovieClip 对象
i.如果sprite 可以满足需求就不要用movieclip。
ii.如果shape可以满足需求就不要用sprite。
如果管理两显示对象就不要用集合去管理。
Number 类型如果不指定值占8byte,当被赋值,如值为0时,点4byte。
BitmapData
i.BitmapData与Bitmap一起用时,Bitmapdata是一个引用,当BitmapData变化时,屏幕也相应的更新,无须在创建Bitmapdata和Bitmap
2. 内存释放
Array数组
i. 清空数组。
Array.splice(0,array.length);删除所有的项。
置null,在创建这一块内存,代价比清空数组来得大。
XML
i.一个包含XML节点的字符转成XML对象时,大小增加了原来的20.3倍。
ii.System.disposeXML(xml)来释放内存,值得注意的是:
释放后的xml还占着相当大的体积,disposeXML只删除节点中的内容,但不删除属性值。xml被释放后属性还占相当大的体积,XML配制文件是用属性名来存还是放在节点内容里呢?
BitmapData对象
i.api中提供dispose()方法在释放,并置null
ii.BitmapData中每个像素点占4个字节,一张1024*768的BitmapData 占3M,BitMapData 的大小跟其尺寸有关,与其所draw 的内容无关。
Loader对象
i.loader.unload()来卸载内容,但在内容中包含了声音,视频,动画等,Timer。这个unload()是不适用的。应采用loader.unloadAndStop(true),可以卸载上述内容,这个方法有点像我们针对MovieClip 做释放的手段。(下面会谈到针对 MovieClip)
Object与Dictionary
i.Object 键只能是字符类型,dictionary 键可以非字符
ii.
iii.通delect 来删除项,如:
fro(var o:Object in Object){
Object[o]=undefined;
delete Object[o];
}
3. 性能优化
将不需要鼠标交互的显示对象禁用鼠标事件。mouseEnable=mouseChildren=false
对执行非动画内容的优先采用计时器(Timer),而不是enter_frame。
i.在不需要高峰的帧频时,通过计时器可以得到高峰的帧频。
ii.TimerEvent 包含一个updateAfterEvent(),可以为动画提高更新速率。
MovieClip
i.当不见时,MovieClip应该被停止,在程序中,如果一个对象是一个带动画的MovieClip.在做内存释放时,先停止movieClip动画,然后置null,这与移除removeEvenListener(Event.entent_frame,onlistenerhander),是一样的。MovieClip如果一直处于重绘的状态时,这个对象是不会被释放的。即使是null,removeChild(),
当考虑到用数组时,首选Vector,它比array要来得快,但是它们的元素只能是同一类型的。
在处理多个对象的鼠标事件时,尽量使用冒泡事件,而不是对每个对象添加侦听事件。
使用内联代码,减少代码调用次数
sprite 对象与MovieClip 对象
i.如果sprite 可以满足需求就不要用movieclip。
ii.如果shape可以满足需求就不要用sprite。
如果管理两显示对象就不要用集合去管理。
Number 类型如果不指定值占8byte,当被赋值,如值为0时,点4byte。
BitmapData
i.BitmapData与Bitmap一起用时,Bitmapdata是一个引用,当BitmapData变化时,屏幕也相应的更新,无须在创建Bitmapdata和Bitmap
2. 内存释放
Array数组
i. 清空数组。
Array.splice(0,array.length);删除所有的项。
置null,在创建这一块内存,代价比清空数组来得大。
XML
i.一个包含XML节点的字符转成XML对象时,大小增加了原来的20.3倍。
ii.System.disposeXML(xml)来释放内存,值得注意的是:
释放后的xml还占着相当大的体积,disposeXML只删除节点中的内容,但不删除属性值。xml被释放后属性还占相当大的体积,XML配制文件是用属性名来存还是放在节点内容里呢?
BitmapData对象
i.api中提供dispose()方法在释放,并置null
ii.BitmapData中每个像素点占4个字节,一张1024*768的BitmapData 占3M,BitMapData 的大小跟其尺寸有关,与其所draw 的内容无关。
Loader对象
i.loader.unload()来卸载内容,但在内容中包含了声音,视频,动画等,Timer。这个unload()是不适用的。应采用loader.unloadAndStop(true),可以卸载上述内容,这个方法有点像我们针对MovieClip 做释放的手段。(下面会谈到针对 MovieClip)
Object与Dictionary
i.Object 键只能是字符类型,dictionary 键可以非字符
ii.
iii.通delect 来删除项,如:
fro(var o:Object in Object){
Object[o]=undefined;
delete Object[o];
}
3. 性能优化
将不需要鼠标交互的显示对象禁用鼠标事件。mouseEnable=mouseChildren=false
对执行非动画内容的优先采用计时器(Timer),而不是enter_frame。
i.在不需要高峰的帧频时,通过计时器可以得到高峰的帧频。
ii.TimerEvent 包含一个updateAfterEvent(),可以为动画提高更新速率。
MovieClip
i.当不见时,MovieClip应该被停止,在程序中,如果一个对象是一个带动画的MovieClip.在做内存释放时,先停止movieClip动画,然后置null,这与移除removeEvenListener(Event.entent_frame,onlistenerhander),是一样的。MovieClip如果一直处于重绘的状态时,这个对象是不会被释放的。即使是null,removeChild(),
当考虑到用数组时,首选Vector,它比array要来得快,但是它们的元素只能是同一类型的。
在处理多个对象的鼠标事件时,尽量使用冒泡事件,而不是对每个对象添加侦听事件。
使用内联代码,减少代码调用次数
相关文章推荐
- FLASH内存优化13条
- 常用 flash CPU占用和内存问题优化
- FLASH内存优化13条
- 用 Flash 开发 iPhone 游戏的优化心得
- FLASH内存优化13条
- Flash 平台技术的优化(二) 节省内存
- Flash 平台技术的优化(三) 文本对象和内存
- Flash内存优化技巧
- <Android>Android 性能优化——内存篇
- 在模块内对内存的分配过早优化的缺点
- 减少windows7内存占用的优化方案
- Android优化浅谈之内存泄露
- web性能优化衡量标准之时间和内存
- Redis 内存使用优化与存储
- Android性能优化之内存篇
- sql大字段Lob查询优化,防止内存溢出!
- 如何优化cocos2d程序的内存使用和程序大小
- C系代码内存处理优化分析
- 手机游戏开发纹理图片优化心得
- 一个Web报表项目的性能分析和优化实践(三) :提高Web应用服务器Tomcat的内存配置,并确认配置正确