Форум 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=179925)

r1kky 24.05.2012 11:11

Мобильные платформы и бассейн с объектами
 
Первый раз делаю игру, которую планируем портировать на IOS и другие мобильные платформы.
Пишут, что необходимо использовать object pool, для того чтобы избегать слова new во время выполнения приложения, так как это очень трудоемкая операция.
У меня, к сожалению, нет Айфона, чтобы потестить что он может.
И возник вопрос:
В каких случаях необходимо использовать object pool ?
Слово new критично только для визуальных объектов ( как в настольных приложениях ) или для всех объектов вообще ?

zuxul 24.05.2012 11:24

Использовать object pool нужно только тогда, когда создается и удаляется большое количество объектов. Для всех других случаев сборщик мусора должен сработать оптимально.

PainKiller 24.05.2012 23:29

Вот хороший урок на эту тему. Действительно, object pool делает работу приложения более стабильной

fljot 25.05.2012 01:19

Цитата:

Сообщение от PainKiller (Сообщение 1081226)
Вот хороший урок на эту тему.

http://active.tutsplus.com/tutorials...#comment-51246

r1kky 25.05.2012 10:37

Спасибо за ответы.
Но меня интересует, что конкретно такого тормознутого происходит при создании нового объекта.
Выделяется память в стеке под ссылку (тут я так понимаю все быстро )
Выделяется память в куче под сам объект ( может тут ?)
И создается сам объект , если тут тогда имеет ли значение тип объекта
1. Обычный объект не визуальный
2. Натив флеш Sprite или MovieClip ( тут создается новый экземпляр картинки )
3. Stage3D объект из текстур, текстуры из текстуре атласа кот создан при запуске приложения. ( тоесть вроде бы новых экзепл не создается, только ссылки )

maxkar 25.05.2012 11:03

Цитата:

Сообщение от r1kky (Сообщение 1081278)
Спасибо за ответы.
Но меня интересует, что конкретно такого тормознутого происходит при создании нового объекта.

Возьмите профайлер и посмотрите. Или тесты сделайте. Если у вас нет времени на профайлер и тесты, значит, оптимизацию проводить еще рано.

Цитата:

Выделяется память в стеке под ссылку (тут я так понимаю все быстро )
Вроде бы нет. Память на стеке выделяется при входе в метод, а не в процессе работы.

Цитата:

Выделяется память в куче под сам объект ( может тут ?)
Зависит от кучи. Вообще это тоже быстрая операция. Насколько быстрая - зависит от используемой кучи (во флеше вроде бы не самая быстрая куча).

Цитата:

И создается сам объект , если тут тогда имеет ли значение тип объекта
Имеет. И не только тип объекта, но и используемая платформа. Важно наличие "native" ресурсов, т.е. системных ресурсов и т.п.
Цитата:

1. Обычный объект не визуальный
Есть еще Sound, network connection и т.п.
Цитата:

2. Натив флеш Sprite или MovieClip ( тут создается новый экземпляр картинки )
Здесь может быть. Выделение системных объектов. Зависит и от наличия ускорения, например (объекты могут копироваться в видеопамять).
Цитата:

3. Stage3D объект из текстур, текстуры из текстуре атласа кот создан при запуске приложения. ( тоесть вроде бы новых экзепл не создается, только ссылки )
Здесь тоже могут быть вызовы системных методов для аллокации соответствующих структур в видеоускорителе.

Но в целом все операции достаточно быстрые. И ответ на ваш начальный вопрос будет: до тех пор, пока проблемы с производительностию (и их причны) явно не обозначены, object pool использовать не стоит. Есть всего одно нормальное показание к его использованию - объекты с заведомо тяжелой инициализацией, которые при этом часто используются (соединения с базой данных и т.п.). У вас таких изначально нет, так что пулы делать не стоит. Кроме того, совсем не факт, что именно аллокации объектов будут узким местом. Возможно, 90% всей работы будет отрисовка и нужно оптимизировать ее. Или будет неоптимальный алгоритм, который нужно оптимизировать.

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

r1kky 25.05.2012 12:00

Шикарный ответ, спасибо :)
Мне просто кажется, что объекты с заведомо тяжелой инициализацией во флэш это спрайты и мувики, во всяком случае в Windows, но думаю в IOS также. Не думаю, что при создании объекта с 5 св-ми числами будут тормоза.
Но так как у меня игра на Старлинге, а там объект Sptite это просто ссылка на кусочек в текстуре атласе, думаю никакой необходимости в бассейне нет.


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

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