加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

调试FLEX / AS3内存泄漏

发布时间:2020-12-15 02:17:45 所属栏目:百科 来源:网络整理
导读:我有一个非常大的Flex Papervision3D应用程序不断创建和销毁对象.它也可以加载和卸载SWF资源文件.当它运行时SWF慢慢消耗内存直到大约2GB,当它晃动播放器时.显然,我很确定我放弃了对不再需要的实例的引用,期望GC能够完成它的工作.但我很想知道问题所在. 我已
我有一个非常大的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
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读