FLEX内存释放优化原则
1.被删除对象在外部的所有引用一定要被删除干净才能被系统当成垃圾回收处理掉;
2.父对象内部的子对象被外部其他对象引用了,会导致此子对象不会被删除,子对象不会被删除又会导致了父对象不会被删除;
3.如果一个对象中引用了外部对象,当自己被删除或者不需要使用此引用对象时,一定要记得把此对象的引用设置为null;
4.本对象删除不了的原因不一定是自己被引用了,也有可能是自己的孩子被外部引用了,孩子删不掉导致父亲也删不掉;
5.除了引用需要删除外,系统组件或者全局工具、管理类如果提供了卸载方法的就一定要调用删除内部对象,否则有可能会造成内存泄露和性能损失;
6.父对象立刻被删除了不代表子对象就会被删除或立刻被删除,可能会在后期被系统自动删除或第二次移除操作时被删除;
7.如果父对象remove了子对象后没有清除对子对象的引用,子对象一样是不能被删除的,父对象也不能被删除;
8.注册的事件如果没有被移除不影响自定义的强行回收机制,但有可能会影响正常的回收机制,所以最好是做到注册的事件jian听器都要记得移除干净。
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还是组件的都需要删除),删除jian听器,调用系 统类的清除方法)
先remove再置null,确保被remove或者removeAll后的对象在外部的引用全部释放干净;
2.利用Flex的性能优化工具Profile来对项目进程进行监控,可知道历史创建过哪些对象,目前有哪些对象没有被删除,创建的数量,占用的内存比例 和用量,创建过程等信息;
总结:关键还是要做好清除工作,自己设置的引用自己要记得删除,自己用过的系统类要记得做好回收处理工作。以上问题 解决的好的话不需要自定义强制回收器也有可能被系统正常的自动回收掉。
文章二
对于Flex性能我想是很多真正打算用它的人最关心的问题,也是我用了这么久之后体会比较深刻的问题,
目前我做过的系统性能也是一个大问题,在这里我总结了一些在技术上提高性能的方法。
1.避免容器的深层嵌套
(因为每个容器都会对其子容器进行计算和调整,一般建议HBox,VBox最好 不要超过3层,但对于复杂系统这个很难避免)
2.对于容器和空间的位置和尺寸尽量采用绝对坐标和硬编码。(减少FlashPlayer深层次的嵌套计算)
3.合理恰当的使用Grid容器,对于能用普通容器如HBox,VBox实现的尽量不要采用Grid(Grid嵌套层次深)
4.避免使用重复、冗余的容器嵌套,如:
1)在Panel,Application中添加一层VBox,Panel,Application本来就是继承于VBox的,添加无谓的VBox只能降 低你系统的性能。
2)对于自定义的容器减少重复多余的父容器,比如:
<mx:VBoxbackgroundColor="#FFCCCC"borderStyle="solid">
<myComponentxmlns="*"/>
</mx:VBox>
你完全可以采用下面的写法,对于myComponents可能它本身就是VBox
<myComponentxmlns="*"backgroundColor="#FFCCCC"borderStyle="solid"/>
5.延迟实例化导航类容器(DeferredInstantiationNavigatorContainers)
如ViewStack,Accordion,TabNavigator等,本身就提供了延迟实例化的功能,你只需要修改其 creationPolicy='auto'即可,它将只实例化第一个要显示的子控件,其余的将在需要的时候实例化。
6.对于flex的效果(Effects)要做到尽量平滑(Smoothly),比如延长它的持续时间(duration),避免使用bmp格式的图片作 背景。
7.对于DataGrid的复杂ItemRenderer,尽量用Canvas而不是VBoxorHBox,这个和Flex1.5中是不同的。
8.如果DataGrid的ItemRenderer是ComboBox等,尽量用ItemEditor而不是ItemRenderer,只有当选中的 cell才会显示其Renderer(避免一次性把所有的cellRenderer都画出来)
9.记得随时Remove没有用的Listener或采用弱引用,这个我在事件机制中提到过(URL...);null不用的变量和数组。
10.对于大批量的数据采用需要的时候去取或者分页
11.提前声明频繁使用的变量,如:
varl:int=list.length;
varw:int=stage.stageWidth;
for(vari:int=0;i<l;i++){
list[i].x=w-100;
}
12.这样也能提高Flex的性能,可能很多人都会不屑,但至少对于Flex来讲它能减少不必要的计算,改善性能,我想这个编程习惯问题要改还真是不容 易,至少我写了1年多直到最近才注意到这个问题。
另外和代码组织有关的建议,如:
1)系统性的常量写在一个常量类里头并用const关键字,一些ItemRenderer代码尽量独立成一个文件而不是直接到处都写
2)不要在界面元素中引用一大串的parent.parent.parent...,一旦界面重新组织将给你带来很大麻烦。如果你用Cairngorm框 架,那么就应该用ViewHelper,尽量的松耦合你的代码。
13.修改production-mode属性为true,2.01在文件flex-webtier-config.xml中。它一般是产品发布的时候要 设置的,你可以理解为c++的Release和Debug版本之间的差异。
14.如果你用FDS,那么尽量用RemoteObject而不是HttpServiceorWebService,因为前者的效率最高
15.对你的系统进行压力测试,Adobe有一个测试工具,叫FlexStressTestingFramework
(rul:http://labs.adobe.com/wiki/index.php/Flex_Stress_Testing_Framework).
它能提供对RPC中的RTMP,AMF,HTTP测试,一般的商业测试软件不支持前两者的测试,
该软件完全免费,你可以到Adobe官网上下
分享到:
相关推荐
在IT行业中,数组是一种基本的数据结构,用于存储同类型元素的集合。然而,在处理大量数据时,固定大小的数组可能会面临内存限制...它的源代码提供了学习和理解动态数组实现、内存管理以及C语言编程技巧的良好示例。
- **目标**: 本教程旨在通过一系列循序渐进的示例来介绍 Flex 的基础知识以及高级应用技巧。 #### 2. Flex 3 及 Flex Builder 安装 - **Flex 3**: Flex 3 是 Flex 框架的一个版本,引入了多项新特性和改进。 - **...
四、Flex编程技巧 1. **使用BitmapData**:对于大型图片,可以先加载为BitmapData对象,然后根据需要缩放,减少内存占用。 2. **使用9-slice scaling**:对于需要保持比例缩放的图片,可以使用9-slice scaling技术,...
在Flex开发中,"flex下拉dataGrid"是一种常见的用户界面组件组合,它结合了下拉菜单(Dropdown)和数据网格(DataGrid)的功能,用于提供丰富的...实现这个功能需要对Flex组件有深入的理解,以及良好的编程和设计技巧。
9. **性能优化**:可能包含关于内存管理、渲染优化、事件处理性能提升等方面的知识和实践。 10. **错误处理与调试**:Flex开发中,有效的错误处理和调试技巧至关重要。代码可能涵盖如何设置断点、跟踪错误、使用...
### Flex 应用程序性能:改善客户端应用程序和服务器性能的技巧与技术 #### 概述 随着互联网技术的发展,富互联网应用(RIA)的需求日益增长。Macromedia Flex 是一个强大的平台,它允许开发者创建高性能的 RIA。...
10. **性能优化**:包括如何减少网络负载、优化渲染性能、合理使用内存和避免不必要的计算等技巧。 通过深入学习和实践这个“flex中文文档”,开发者不仅可以掌握Flex的基本用法,还能了解Flex的最佳实践和高级特性...
8. **性能优化**:书中的章节会讨论如何优化Flex应用的性能,包括减少内存消耗、提高渲染速度和优化数据处理。 9. **错误处理与调试**:有效的错误处理和调试技巧对任何开发者都至关重要。书中会介绍如何利用Flex的...
9. **调试和性能优化**:书中可能包含调试Flex应用程序的方法,以及提高性能和减少内存消耗的策略。 10. **国际化和本地化**:Flex 3支持多语言应用,书中可能会介绍如何实现这一功能。 11. **Flex的应用实例**:...
5. 动态创建和销毁组件:在运行时根据需要动态添加或移除组件,以优化性能和内存使用。 6. 组件扩展:学习如何继承现有组件并添加新的功能,或者从头创建自定义组件。 总之,Adobe Flex 3 Component Explore 提供...
本篇文章将深入探讨Flex DataGrid的分页实现原理、步骤以及优化技巧。 首先,Flex DataGrid是一个强大的组件,它可以展示表格形式的数据,支持排序、过滤、选择等功能。在处理大量数据时,引入分页功能,可以显著...
flex3的cookbook书籍完整版dpf(包含目录),目录是我花了两个多小时自己整理的,希望对大家有帮助。 目录: 第一章.Flex与ActionScript基础(3) ... 使用Flex Builder 3的Memory Profiling查看内存快照 第二十六章...
- **优化与性能**:了解如何减少内存占用,提高游戏运行速度。 **3. Flashdevelop和命令编译** FlashDevelop支持命令行编译,这对于自动化构建流程和集成版本控制特别有用。这份.docx文档可能会涵盖: - **命令行...
然而,由于历史原因,Gilead的库文件较大,上传和下载可能成为问题,因此在实际应用中,开发者可能需要采取一些技巧来处理这个问题。 在Flex中使用Gilead和Hibernate的懒加载,首先需要确保在Hibernate配置文件中对...
总的来说,野火K60参考代码V5.1是一个完整的开发资源集合,涵盖了K60微控制器的硬件接口、软件编程以及功耗优化等多个方面,对于想要深入理解和应用K60的开发者来说,这是一个非常宝贵的参考资料。通过逐步学习和...
6. **性能优化**:内存优化、耗电优化、启动优化、渲染优化、网络优化等,以及使用Android Profiler工具进行性能分析。 7. **测试**:单元测试、集成测试、UI测试,使用JUnit、Espresso、Mockito等工具进行测试编写...
**C-minuse词法分析器**是基于C语言实现的一款工具,主要用于编译原理中的词法分析阶段。...同时,这也是一个实践C语言编程技巧的好机会,因为词法分析器的编写涉及到字符串处理、内存管理和错误处理等多个方面。
- **内存分析**:Java程序运行时会涉及到多种类型的内存区域,比如堆内存、栈内存、方法区等。理解这些区域的功能和作用对于优化程序性能至关重要。 - **递归**:递归是一种算法或程序设计技巧,在函数或过程中调用...