![]() |
Вопрос производительности.
Здравствуйте. У меня такой вопрос:
Есть множество объектов класса, расширяющего DisplayObject. Их надо покадрово анимировать. Так вот, есть 2 варианта того, как это можно сделать: Вариант 1: Засунуть событие Event.ENTER_FRAME внутрь этого класса, по которому обновлять позицию элемента. Вариант 2: Создать массив из этих элементов и по событию Event.ENTER_FRAME уже в главном классе, в цикле запускать метод update() для каждого элемента. Какой вариант более эффективный в плане потребления ресурсов компьютера? |
Второй вариант
|
Можно поподробнее почему второй? Просто мне хотелось бы понять что тут влияет на эффективность.
Во втором варианте ведь ещё каждый раз идёт обращение к элементам массива, что тоже в свою очередь уменьшает производительность. |
Не на столько, на сколько в первом случае.
Да, второй вариант намного лучше. |
Спасибо.
|
рассылка ENTER_FRAME всем подписантам это тоже перебор списка, т.е. в обоих случаях так или иначе массив,
но в случае с подпиской каждого экземпляра к вызову update добавляются затраты на создание Event'ов на каждого слушателя имхо разница не велика, почувствовать можно только на достаточно большом количестве объектов и то если сам update не особо затратный |
Код AS3:
А вот если подписка-отписка идет часто - то на перстройку массива будет теряться много времени, по сравнению с EventDispatcher. Если реализовывать список на Dictionary - тогда подписка-отписка будет быстрее, чем у EventDispatcher, но диспетчеризация замедлится, хотя останется быстрее EventDispatcher-овской. Да, есть еще такая интересная вещь, как отписка/подписка событий внутри листенера - если ее поддержать при самопальном диспетчинге - будет медленнее в любом случае - ибо потребуется копировать массив всех слушателей (не уверен, но вроде как, можно извернуться и не делать копирование при отсутствии отписки внутри листенера). |
| Часовой пояс GMT +4, время: 20:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.