![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2009
Сообщений: 38
|
Здравствуйте!
Есть флешка, которая представляет собой что-то вроде видео плеера. На ней есть кнопка плея и паузы. ![]() Когда система играет, то проигрывается видео, рисуется несколько графиков, еще двигается несколько мувиклипов, изменяются лейблы. Также, используется свой курсор-муви клип... Короче, происходит много перерисовок. Через примерно минут 20 все начинает прилично тормозить и чем дальше тем хуже. Самое непонятное то, что тормозит даже если выключить плей, то есть остановить всякие отрисовки. От тормозов помогает избавиться только перегрузка страницы. Эксперименты показали, что, видимо, что-то происходит с рисованием. Например если понизить качество, то станет быстрее. Конечно понимаю, что скорее всего дело в руках, но может быть я что-то упустил? Может можно как-то что-то очищать, какой-нибудь буфер рисования? Есть мысли что это может быть? И еще, есть ли какие-нибудь средства профилировки для флеша? Как можно отладиться в такой неприятной ситуации? Добавлено через 20 часов 41 минуту Совсем никаких идей? |
|
|||||
|
дело в использовании памяти и жестких ссылках на объекты.
|
|
|||||
|
Регистрация: Apr 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 355
|
Проверьте не создается ли каких нибудь объектов на сцене которые периодически с нее удаляются и должны убираться мусорщиком. Скорей всего такие объекты есть, и они подписаны на события, или увязаны с потоковым видео или музыкой. Перед их удалением необходимо убить все ссылки которые могут быть с ними свзяаны, в том числе все подписки.
__________________
Хочу IQ как ICQ, ну или хотя бы ICQ как IQ |
|
|||||
|
Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
|
Может быть мемори-лики, но есть подозрение, что автор не очищает graphics при перерисовке. Симптоматика похожая.
Код в студию. Или хотя б тот участок, где производится отрисовка.
__________________
...Тебе страшно? Мне - нет. |
|
|||||
|
Регистрация: Feb 2009
Сообщений: 141
|
Не забываем отписываться от ENTER_FRAME всегда и везде!!!
|
|
|||||
|
Регистрация: Jan 2009
Сообщений: 38
|
Ух, а я уже потерял надежду.
Fillini, как можно проверить использование памяти? Что вы имеете в виду под «жесткими ссылками на объекты»? SunShadow, вроде таких объектов нет. Периодически меняются только графики, но это простые lineTo, moveTo. Остальные объекты создаются один раз, а потом просто двигаются или скрываются. Как можно проверить, что все именно так как я думаю? ...есть подозрение, что автор не очищает graphics... Нет, тут вроде все нормально. Я, вообще, использую haXe. Процедуры прорисовки все примерно такие: Vreden, тут вроде все нормально. Я использую такого предка для всех визуальных контролов: class Control extends MovieClip{ ... public function invalidate() { addEventListener(Event.ENTER_FRAME, onInvalidate); } private function onInvalidate(event:Event) { removeEventListener(Event.ENTER_FRAME, onInvalidate); draw(); } public function draw() { dispatchEvent(new Event(Control.DRAW)); } } |
|
|||||
|
>>тормозит даже если выключить плей, то есть остановить всякие отрисовки
т.е. тормоза не в самой отрисовке, а выводе нарисованного на экран я бы попробовал сразу после каждой отрисовки перегонять все в битмап, а graphics очищать |
|
|||||
|
Modus ponens
|
Во Флексе есть профайлер... других вроде нету... Ну можно потрейсить System.totalMemory но это как бы мало поможет - все равно что на таск-менеджер посмотреть
![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
Память можно посмотреть и ctrl+alt+delete. Если память все время увеличивается значит дело в жестких ссылках.
листенеры правильно писать так так же не забываем очищать DisplayList. примерно вот таким кодом |
|
|||||
|
Цитата:
я бы сказал, что листенеры можно писать и так, если лень или некогда построить нормальную структуру |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:49. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|