«Оптимизированная» версия, я думаю, не слишком оптимизирует.
Ваш код не выполняет 2 доступа в каждой итерации. Это происходит только тогда, когда вам случается найти мертвого Чара; и после этого вы возвращаетесь. Так что, ничего страшного, я думаю.
Лично я не думаю, что повторное использование слотов для массивов также будет иметь большое значение. И, возможно, это может ухудшиться (но хуже всего то, что ваш код может быть проще, если вы его избегаете). Предположим, у вас есть 100 символов, 60 из которых мертвы, и у вас есть цикл, который запускает каждый кадр и выполняет некоторую проверку / действие для каждого живого символа. Вы могли бы зациклить более 100 символов, когда вы могли бы зациклить более 40 символов, если бы у вас был список живых объектов и отдельный список мертвых объектов, готовых использовать их повторно. Кроме того, «мертвый список» может быть обработан как стек, поэтому для получения символа не требуется итераций.
В любом случае, я вижу 2 вещи, которые вы могли бы легко оптимизировать в своем коде:
1) получить длину списка вне цикла:
Сделайте это:
var len:int = Char.charlist.length;
for (var i:Number = 0; i < len; i++) {
Вместо этого:
for (var i:Number = 0; i < Char.charlist.length; i++) {
Компилятор не оптимизирует вызов длины (следуя спецификации ecmascript).
2) Избегать статического доступа (для чарлиста). Известно, что он значительно медленнее, чем доступ к экземпляру.
Edit:
Перечитывая ваш вопрос, я понимаю, что неправильно понял его часть. Вы не пытаетесь повторно использовать объекты Char, а скорее слоты массивов. Тем не менее, я не думаю, что повторное использование слотов массивов того стоит (массивы в ActionScript не исправлены); но что-то, что может помочь производительности, - это повторное использование самих объектов Char. Перезапуск Sprite, как правило, дешевле, чем создание нового.
Вы можете управлять этим с помощью пула «мертвых» объектов, из которых вы можете взять один и «вернуть его к жизни», когда вам нужно, вместо создания нового.
В этом посте говорится о пулах объектов (сам блог является хорошим источником материалов для ActionScript, особенно по темам производительности и структур данных; стоит взглянуть):
http://lab.polygonal.de/2008/06/18/using-object-pools/