Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.12.2011, 19:43
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 1  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Question Вопрос производительности.

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

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

Старый 04.12.2011, 19:55
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 2  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
Второй вариант
__________________
http://www.chessmax.ru

Старый 04.12.2011, 20:08
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 3  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Можно поподробнее почему второй? Просто мне хотелось бы понять что тут влияет на эффективность.
Во втором варианте ведь ещё каждый раз идёт обращение к элементам массива, что тоже в свою очередь уменьшает производительность.


Последний раз редактировалось Parez; 04.12.2011 в 20:13.
Старый 04.12.2011, 20:39
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Не на столько, на сколько в первом случае.
Да, второй вариант намного лучше.

Старый 04.12.2011, 20:52
Parez вне форума Посмотреть профиль Отправить личное сообщение для Parez Найти все сообщения от Parez
  № 5  
Ответить с цитированием
Parez

Регистрация: Nov 2010
Адрес: Ярославль
Сообщений: 249
Спасибо.

Старый 04.12.2011, 20:54
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
рассылка ENTER_FRAME всем подписантам это тоже перебор списка, т.е. в обоих случаях так или иначе массив,
но в случае с подпиской каждого экземпляра к вызову update добавляются затраты на создание Event'ов на каждого слушателя
имхо разница не велика, почувствовать можно только на достаточно большом количестве объектов и то если сам update не особо затратный

Старый 04.12.2011, 22:36
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Код AS3:
Вариант 2:
Создать массив из этих элементов и по событию Event.ENTER_FRAME уже в главном классе, в цикле запускать метод update() для каждого элемента.
Если отдельные элементы подписываются/отписываются нечасто, то второй вариант действительно быстрее из-за того, что event не создается, может быть ещё из-за более простой диспетчеризации без учета приоритета и всяких там всплываний.

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

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


Последний раз редактировалось expl; 04.12.2011 в 22:41.
Создать новую тему Ответ Часовой пояс GMT +4, время: 19:52.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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