Я наткнулся на что-то, объясняющее, как использовать Flex Profiler в Flex Builder, и это было ОГРОМНОЙ помощью для устранения утечек памяти. Я определенно предложил бы попробовать это. Это очень просто в использовании. Некоторые вещи, которые я нашел при профилировании моих приложений:
Избегайте использования коллекций (по крайней мере, БОЛЬШИХ коллекций) в качестве свойств объектов значений. У меня было несколько типов классов объектов-значений в моем приложении 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
}
Я бы также предложил удалить прослушиватели событий, когда они больше не нужны.