• FLEX/FLASH BUILDER 进行AS项目开发需要注意的内存泄漏


    要尽量使用弱引用
    1. 调用addEventListener方法时,useWeakReference标签使用默认值false。
    2. 调用BindingUtils的bindProperty和bindSetter方法时,useWeakReference标签使用默认值false。
    请注意:我并不清楚Flex 3中是否也是这样。
    3. 调用ChangeWatcher.watch方法,useWeakReference标签使用默认值false。
    请注意:我并不清楚Flex 3中是否也是这样。
    4. 使用Dictionaries时,构建器把weakKeys标签的值设为false。
    第3、4点会创建一些隐性连接,导致内存泄漏

    不会造成内存泄漏的情况

    1、使用弱引用
    2、自身的监听 如this.addEventListener(Event.Click,onClick);
    3、子对象的监听 child.addEventListener(..);
    也就是说,以上三种情况不手动removeEventListener也不会造成内存泄漏。当然,推荐是自己remove掉比较好。但是我也觉得这样挺烦的。

    会造成内存泄漏的情况
    对父对象的监听会造成内存泄漏,如parent.addEventListener(..);这种情况若不手动remove或使用弱引用肯定会导致内存泄漏。
    绑定也会造成内存泄漏
    [Bindable]
    protected var langPackage:XML = .xx;
    <mx:Label x="10" text="{langPackage.roleName}" textAlign="right" width="82" verticalCenter="12"/>
    这样的绑定,我经过profile分析,发现若没有将langPackage = null,即使它的父窗口已经关闭了,这个绑定监听依然存在,并导致父窗口的实例无法回收。
    按钮的icon图片也会导致内存泄漏
        <mx:Button buttonMode="true"    icon="@Embed(source='/assets/skin/Default/saveIcon.png')" />
    以上button无法被回收。若写成
    [Bindable][Embed(source='/assets/skin/Default/saveIcon.png')]
    private var saveIcon:Class;
    <mx:Button buttonMode="true"  icon="{saveIcon}" />
    并在移除的时候将saveIcon = null;则可以回收。
    当然,这样就很烦了。在flex4中已经不用这样写了。

    如果是BindingUtils的绑定。需要unWatch才能释放的

    参考资料:

    http://www.riameeting.com/node/587

    http://www.ibm.com/developerworks/cn/web/1010_wangpeng_flexmem/

    强制进行垃圾回收

    try{
        (new LocalConnection).connect("mtzg");
        (new LocalConnection).connect("mtzg");
    }catch(err:Error){ }

    FLASH中 连错两次系统就会强制执行垃圾回收机制,从而达到释放一定内存的效果 。

    try中那两句语句只是为了让程序出错,错误的参数可以千奇百怪."mtzg"也可以替换为其他字符串。

    有争议的地方:内存优化以及弱引用

    http://xiejiangbo.iteye.com/blog/459836

  • 相关阅读:
    Boost练习程序(program_options)
    vim一般设置
    删除文件夹及其子文件
    linux搜索一个文件
    窗口最大最小化
    3dmax 学习
    打造个人电脑安全终极防线
    Cacls Command Question
    vc++学习(六)——代码学习
    学习3dmax(四)
  • 原文地址:https://www.cnblogs.com/holycy/p/2121860.html
Copyright © 2020-2023  润新知