微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调试FLEX / AS3内存泄漏

我有一个非常大的Flex& Papervision3D应用程序不断创建和销毁对象.它也可以加载和卸载SWF资源文件.当它运行时SWF慢慢消耗内存直到大约2GB,当它晃动播放器时.显然,我很确定我放弃了对不再需要的实例的引用,期望GC能够完成它的工作.但我很想知道问题所在.

我已经尝试使用分析器及其选项捕获内存快照等 – 但我的问题仍然是回避.我认为使用调试Flash播放器也存在已知问题吗?但我也不喜欢使用发布版本.

如何使用FLEX / AS3跟踪内存泄漏问题?您用于定位消费的一些策略,技巧或工具是什么

解决方法

我偶然发现了解释如何在Flex Builder中使用Flex Profiler的内容,这对我调试内存泄漏是一个巨大的帮助.我肯定会建议尝试一下.它非常易于使用.我在分析应用程序时发现的一些事情:

避免使用集合(至少是LARGE集合)作为Value Objects的属性.我在Cairngorm应用程序中有几种类型的值对象类,每个类都有一个“children”属性,它是一个ArrayCollection,用于过滤.在进行性能分析时,我发现这些是我最大的内存消耗者之一,因此我将应用程序更改为将“parentId”存储为int并将其用于过滤.使用的内存大幅削减.像这样的东西:

旧方式:

public class Owner1
{
    public var id:int;
    public var label:String;
    public var children:ArrayCollection; // Stores any number of Owner2 Objects
}

public class Owner2
{
    public var id:int;
    public var label:String;
    public var children:ArrayCollection; // Stores any number of Owner3 Objects
}

public class Owner3
{
    public var id:int;
    public var label:String;
}

方法

public class Owner1
{
    public var id:int;
    public var label:String;
}

public class Owner2
{
    public var id:int;
    public var label:String;
    public var parentId:int; // Refers to id of Owner1 Object
}

public class Owner3
{
    public var id:int;
    public var label:String;
    public var parentId:int; // Refers to id of Owner2 Object
}

我还建议在不再需要时删除事件监听器.

原文地址:https://www.jb51.cc/flex/241625.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐