as3: полностью ли удаляет объект сращивание массива?

#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-файл. Существует множество профилировщиков с открытым исходным кодом, которые рисуют графики использования памяти.