#actionscript-3 #garbage-collection #array-splice
#actionscript-3 #сбор мусора #array-splice
Вопрос:
У меня много отображаемых объектов в массиве, которые я постоянно добавляю и удаляю со сцены. При удалении они больше не используются.
Учитывая, что DisplayObject отсутствует в списке отображения и не имеет прослушивателей событий… будет ли собираться мусор, если я использую splice для удаления его из массива?
Безопаснее ли сначала обнулить объект?
myArray[2] = null;
myArray.splice(2,1);
Ответ №1:
Пока нет оставшихся ссылок на DisplayObject
then yes, удаление его из массива с помощью splice
или даже просто установка его в null
позволит ему стать кандидатом на сборку мусора.
Обновление: установка для элемента значения null
перед удалением из массива является избыточной и не будет иметь никакого значения.
Ответ №2:
Если вам нужна более высокая производительность, я предлагаю вам использовать пулы вместо создания множества объектов и помещения их в массив. Используйте некоторую реализацию связанного списка вместо операции splice(), которая действительно медленная.
Комментарии:
1. Спасибо за идею. Производительность в порядке, я беспокоюсь только потому, что эта вспышка будет работать часами в музее без перезапуска.
2. Поэтому я советую вам использовать какой-нибудь профилировщик, чтобы проверить, нет ли у вас утечек памяти (постоянно ли используется ваша память на одном уровне). Вы можете легко проверить, сколько памяти использует ваш swf-файл. Существует множество профилировщиков с открытым исходным кодом, которые рисуют графики использования памяти.