gpt4 book ai didi

apache-flex - 调试FLEX/AS3内存泄漏

转载 作者:行者123 更新时间:2023-12-04 13:45:43 25 4
gpt4 key购买 nike

我有一个相当大的Flex&Papervision3D应用程序,可以连续创建和销毁对象。它还会加载和卸载SWF资源文件。在运行时,SWF会使播放器发出嘶哑的声音,慢慢消耗大约2GB的内存。显然,我敢肯定,我放弃了我不再希望的实例,因为他们期望GC能够完成其工作。但是我花了一点时间来弄清楚问题出在哪里。

我曾尝试使用探查器及其选项来捕获内存快照等,但是我的问题仍然是回避。我认为使用调试Flash Player也存在已知问题吗?但是使用发行版我也不高兴。

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

最佳答案

我偶然发现了一些解释如何在Flex Builder中使用Flex Profiler的东西,这对调试内存泄漏非常有帮助。我绝对建议尝试一下。它很容易使用。在对应用程序进行性能分析时发现了一些东西:

避免将集合(至少是大型集合)用作值对象的属性。在Cairngorm应用程序中,我有几种类型的值对象类,每种类型都有一个“子项”属性,该属性是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
}

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

关于apache-flex - 调试FLEX/AS3内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com