调试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
}

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

相关文章
相关标签/搜索