`
joe.feng
  • 浏览: 134786 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Flex内存优化(转载)

    博客分类:
  • Flex
阅读更多

 

1. 使用合适的显示对象,对于非交互的简单形状用Shape对象,对于不需要时间轴的交互式对象用Sprite,对于使用时间轴的动画用MovieClip,他们的内存使用量分别是236,412,440,可见shape很省内存

2. Number原始存储内存占8个字节,int,uint,Boolean,String均占4个字节, 关于赋值后作占内存,取决值赋的值

3. 对象的重复利用, 在FOR循环内new对象要小心,每次new都会增大内存。

4. 通过重复使用 BitmapData 对象可以节省更多的内存,即不同的bitmap公用一个bitmapdata

5. 重复使用相同对象的时候,可以考虑下对象池的应用

6. 垃圾回收运行时会不断检测出处于非活动状态的对象,大型项目中此进程会占用大量CPU,所以尽量重使用对象,不用的对象设置为NULL

7. 内存释放方面,为了确保被垃圾回收,首先保证该对象没有其他引用,然后移除监听,在然后设置为NULL。关于bitmapdata, 先用dispose 在设置为null

8. 在 Flash Player 10.1 中,对所有bitmapdata实例采用同一版本的bitmapdata, 大大节省了内存, 当bitmapdata数据发生变化的时候,内存中会建立一个新的bitmapdata实例

9. 尽量避免使用滤镜,当对显示对象使用滤镜的时候,内存中将创建两个位图,每个位图的大小都与显示对象相同。一个是显示对象的栅格化版本,一个是用于滤镜的位图

10. 当修改滤镜的属性的时候,内存中两个位图都将更新创建新的位图,会消耗一些CPU,并且会占用大量内存。

11. Flash Player 10.1 在所有平台上引入了一种新的过滤行为。如果滤镜在 30 秒内没有进行修改,或者将其隐藏或置于屏幕之外,将释放未过滤的位图占用的内存。该方式成为动态位图卸载。

12. 使用滤镜时仍要谨慎小心;在对它们进行修改时,仍要求大量 CPU 或 GPU 处理。

13. 如果想要滤镜效果,最好用PHOTOSHOP来做一个

1. 被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉; 
2. 父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除; 
3. 如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null; 
4. 本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉; 
5. 除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失; 
6. 父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除; 
7. 如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除; 
8. 注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件监听器都要记得移除干净。 
9. 父对象被删除了不代表其余子对象都删除了,找到一种状态的泄露代码不等于其他状态就没有泄露了,要各模块各状态逐个进行测试分析,直到测试任何状态下都能删除整个对象为止。

内存泄露举例: 
1. 引用泄露:对子对象的引用,外部对本对象或子对象的引用都需要置null; 
2. 系统类泄露:使用了系统类而忘记做删除操作了,如BindingUtils.bindSetter(),ChangeWatcher.watch()函数时候完毕后需要调用ChangeWatcher.unwatch()函数来清除引用 ,否则使用此函数的对象将不会被删除; 
类似的还有MUSIC,VIDEO,IMAGE,TIMER,EVENT,BINDING等。 
3. 效果泄露:当对组件应用效果Effect的时候,当本对象本删除时需要把本对象和子对象上的Effect动画停止掉,然后把Effect的target对象置null; 如果不停止掉动画直接把 Effect置null将不能正常移除对象。 
4. SWF泄露:要完全删除一个SWF要调用它的unload()方法并且把对象置null; 
5. 图片泄露:当Image对象使用完毕后要把source置null;(为测试); 
6. 声音、视频泄露: 当不需要一个音乐或视频是需要停止音乐,删除对象,引用置null; 
内存泄露解决方法: 
1. 在组件的REMOVED_FROM_STAGE事件回掉中做垃圾处理操作(移除所有对外引用(不管是VO还是组件的都需要删除),删除监听器,调用系统类的清除方法) 
先remove再置null, 确保被remove或者removeAll后的对象在外部的引用全部释放干净; 
2. 利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例和用量,创建过程等信息;

总结:关键还是要做好清除工作,自己设置的引用自己要记得删
分享到:
评论

相关推荐

    Flex内存释放优化原则

    FLEX内存释放优化原则,内存泄露解决方法,内存泄露情况

    FLEX内存释放优化原则

    ### FLEX内存释放优化原则详解 #### 一、引言 在FLEX开发过程中,合理的内存管理至关重要。不当的内存管理不仅会导致应用运行效率降低,还可能引发诸如黑屏、模糊显示等问题,严重影响用户体验。本文将针对“FLEX...

    flex内存泄露(转载)

    ### Flex应用内存泄露的分析与诊断 #### 引言 Flex是一种用于构建和部署富互联网应用(RIA)的技术,它采用ActionScript语言作为脚本语言,并在Flash Player虚拟机(AVM)中运行。如同其他高级编程语言一样,AVM...

    flex builder 优化

    flex builder 优化

    flex如何进行内存优化

    ### Flex内存优化技巧详解 在开发Flex应用时,合理的内存管理是提高应用性能的...开发者需要时刻关注内存使用情况,并采取适当的措施来优化内存管理策略。通过遵循上述建议,可以显著提高Flex应用程序的性能和稳定性。

    flex编译优化方法

    Flex编译优化方法是提升开发效率的关键,尤其是在大型Flex项目中,编译时间长和Eclipse性能问题可能严重影响开发流程。以下是一些针对Flex编译慢的优化策略: 1. **关闭不必要的项目**:在Eclipse中,确保只开启...

    flex瘦身优化之我见(内部资料)

    - **代码优化**:删除无用的代码和资源,精简XML和CSS,优化算法,减少不必要的计算和内存分配,都有助于提高程序性能和减少体积。 通过以上方法,可以有效优化Flex项目的大小,提高加载速度,提升用户体验。在...

    Flex 应用内存泄露的分析与诊断

    7. 定期检查和优化代码:定期进行代码审查,寻找可能导致内存泄露的潜在问题,同时在开发过程中养成良好的编程习惯。 总之,理解 FlashPlayer 的垃圾回收机制和 Flex 中对象引用的管理是防止内存泄露的关键。通过...

    flex 性能,查看内存

    Flex应用通常涉及大量的交互和动态数据处理,因此性能优化和内存管理是开发过程中的关键环节。以下是对Flex性能优化和内存查看的深入探讨: 1. **Flex性能优化**: - **代码优化**:减少不必要的计算,避免在循环...

    flex性能优化文档

    Flex性能优化是一个重要的主题,...总之,优化Flex应用性能涉及多个层面,包括资源加载策略、代码结构优化和内存管理。通过综合运用这些技巧,可以显著改善Flex应用的启动速度和整体响应性,从而提供更流畅的用户体验。

    Flex 性能优化全集

    ### Flex性能优化全集 #### 引言 随着技术的发展,用户对于应用程序的要求越来越高,不仅在功能上有所期待,更注重应用的响应速度与流畅度。Adobe Flex 是一款用于构建和部署跨平台富互联网应用程序的强大工具,...

    Flex内存泄露总结

    Flex内存泄露总结主要聚焦在Flash Player的垃圾回收机制和内存管理问题上,这对于优化Flex应用程序的性能至关重要。首先,我们要理解垃圾回收的基本原理。在Flash Player中,内存的释放工作由垃圾回收器负责,它是一...

    Flex内存泄露问题

    14. **Flex性能分析**:使用Flex提供的性能分析工具(如FlexProfiler)来检测内存泄漏,找出潜在的问题点,并针对性地优化代码。 通过遵循上述建议,开发者可以有效地管理和减少Flex应用程序中的内存泄漏,从而提高...

    FLEX内存不足,无法使用设计模式的解决办法

    按照描述中的步骤操作后,这些DLL文件会与Adobe Flex的运行环境进行集成,可能通过优化内存分配或提供更高效的渲染机制,从而解决内存不足的问题,使设计模式可以正常工作。 总结来说,当遇到FLEX内存不足导致无法...

    FLEX内存优化技巧集合

    在FLEX开发中,内存优化是提高应用程序性能和稳定性的重要环节。以下是一些关于FLEX内存释放和优化的关键知识点: 1. **引用管理**:确保当对象不再使用时,所有外部引用都被删除。如果一个对象被其他对象引用,...

    有关flex 内存泄漏memory leak介绍的ppt

    在IT行业中,内存泄漏是开发者面临的一个重要问题,特别是在使用像Flex这样的技术时。本篇内容将深入探讨Flex中的内存泄漏...记住,理解和调试内存泄漏问题需要耐心和细心,但它对于优化Flex应用的长期健康至关重要。

Global site tag (gtag.js) - Google Analytics