Вы должны попробовать что-то, прежде чем запрашивать желаемый результат.
Перебирая список списка, имея уникальный идентификатор, вы можете использовать функцию перечисления, которая «дает индексатор» списка.
for i,sub_list in enumerate(lst):
identifier = i
[(value,identifier) for value in sublist]
....
Надеясь, это поможет
Я споткнулся через что-то объясняющее, как использовать Профилировщика Flex в Разработчике Flex, и это была ОГРОМНАЯ справка ко мне в отладке утечек памяти. Я определенно предложил бы испытать его. Это очень просто в использовании. Некоторые вещи я нашел при профилировании моих приложений:
Избегайте использования наборов (по крайней мере, Большое количество) как свойства Объектов Значения. У меня было несколько типов Классов объектов Значения в моем приложении Дымчатого топаза, и у каждого было "дочернее" свойство, которое было 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
}
Я также предложил бы удалить слушателей события, когда они больше не необходимы.
Если Ваша утечка памяти растет экспоненциально, это, вероятно, означает, что GC не удается сделать его задание. Смотрите на свой код и посмотрите везде, где можно уменьшить подсчеты ссылок объектов (путем установки их на null
). Сделайте обработчики событий слабыми. И перепрофиль.
Я обычно реализую метод очистки в каждом классе, который я делаю (так как AS не имеет деструкторов). Основная проблема, которую я заметил с GC, со слушателями события. Дополнительный, к какой сказанный dirkgently, также старайтесь избегать анонимных функций слушателя (поскольку Вы не можете явно удалить их). Вот несколько ссылок, которые можно найти полезным:
из-за подобных проблем я разработал библиотеку с открытым исходным кодом, которая помогает отслеживать все события, которые вы выполняете в любой момент времени. его действительно легко реализовать, и я реорганизовал проекты за 10-15 минут, преобразовав их для использования разработанного мной EventController.
в основном для вашего сценария я бы перебрал все события и заменил их из: obj.addEventListener (...);
на: EC.add (obj ,. ..);
остальное то же самое, что нужно сделать, это зарегистрировать событие и упростить просмотр всех ваших событий в любой момент, когда вы хотите, используя EC.log ();
все детали и документация есть на моем сайте, я хотел бы знать, поможет ли это вам и начнете ли вы с ней работать. Если у вас есть хорошие или плохие отзывы, пожалуйста, опубликуйте их, и я изучу их!
сайт: http://fla.as/ec/