我偶然发现了一些解释如何在 Flex Builder 中使用 Flex Profiler 的东西,这对我调试内存泄漏有很大帮助。我肯定会建议尝试一下。它非常易于使用。我在分析我的应用程序时发现的一些事情:
避免使用集合(至少 LARGE 集合)作为值对象的属性。我的 Cairngorm 应用程序中有几种类型的值对象类,每个都有一个“子”属性,它是一个ArrayCollection
,用于过滤。分析时,我发现这些是我最大的内存消耗者之一,所以我更改了我的应用程序,改为将“parentId”存储为 anint
并使用它进行过滤。使用的内存被大幅削减。像这样的东西:
老办法:
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
}
我还建议在不再需要事件侦听器时删除它们。