Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос производительности. (http://www.flasher.ru/forum/showthread.php?t=172224)

Parez 04.12.2011 19:43

Вопрос производительности.
 
Здравствуйте. У меня такой вопрос:
Есть множество объектов класса, расширяющего DisplayObject. Их надо покадрово анимировать. Так вот, есть 2 варианта того, как это можно сделать:
Вариант 1:
Засунуть событие Event.ENTER_FRAME внутрь этого класса, по которому обновлять позицию элемента.
Вариант 2:
Создать массив из этих элементов и по событию Event.ENTER_FRAME уже в главном классе, в цикле запускать метод update() для каждого элемента.

Какой вариант более эффективный в плане потребления ресурсов компьютера?

Inet_PC 04.12.2011 19:55

Второй вариант

Parez 04.12.2011 20:08

Можно поподробнее почему второй? Просто мне хотелось бы понять что тут влияет на эффективность.
Во втором варианте ведь ещё каждый раз идёт обращение к элементам массива, что тоже в свою очередь уменьшает производительность.

goodguy 04.12.2011 20:39

Не на столько, на сколько в первом случае.
Да, второй вариант намного лучше.

Parez 04.12.2011 20:52

Спасибо.

silin 04.12.2011 20:54

рассылка ENTER_FRAME всем подписантам это тоже перебор списка, т.е. в обоих случаях так или иначе массив,
но в случае с подпиской каждого экземпляра к вызову update добавляются затраты на создание Event'ов на каждого слушателя
имхо разница не велика, почувствовать можно только на достаточно большом количестве объектов и то если сам update не особо затратный

expl 04.12.2011 22:36

Код AS3:

Вариант 2:
Создать массив из этих элементов и по событию Event.ENTER_FRAME уже в главном классе, в цикле запускать метод update() для каждого элемента.

Если отдельные элементы подписываются/отписываются нечасто, то второй вариант действительно быстрее из-за того, что event не создается, может быть ещё из-за более простой диспетчеризации без учета приоритета и всяких там всплываний.

А вот если подписка-отписка идет часто - то на перстройку массива будет теряться много времени, по сравнению с EventDispatcher.
Если реализовывать список на Dictionary - тогда подписка-отписка будет быстрее, чем у EventDispatcher, но диспетчеризация замедлится, хотя останется быстрее EventDispatcher-овской.

Да, есть еще такая интересная вещь, как отписка/подписка событий внутри листенера - если ее поддержать при самопальном диспетчинге - будет медленнее в любом случае - ибо потребуется копировать массив всех слушателей (не уверен, но вроде как, можно извернуться и не делать копирование при отсутствии отписки внутри листенера).


Часовой пояс GMT +4, время: 20:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.