Как обнаружить утечки памяти во Flash? - PullRequest
3 голосов
/ 11 февраля 2010

Как узнать, есть ли утечка памяти в скомпилированном SWF-файле?

Существуют ли инструменты, настройки firebug и т. Д., Чтобы выяснить, есть ли проблема? Я не могу найти много в отладочном Flash-плеере, кроме размера файла и времени загрузки.

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

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

5 голосов
/ 13 февраля 2010

Я бы порекомендовал вам взглянуть и на профилировщик Flex Builder. Если вы разделите код на модуль, загрузите его, взаимодействуете с ним, а затем выгрузите его, вы сможете легко увидеть, есть ли еще классы из вашего модуля в памяти. Обычно это происходит из-за прослушивателей событий, которые не используют слабые ссылки (5-й параметр в методе addEventListener).

Также стоит прочитать этот пост в блоге и связанную с ним презентацию по управлению памятью Flash Player:

http://blogs.adobe.com/aharui/2007/03/garbage_collection_and_memory.html

4 голосов
/ 11 февраля 2010

Все, что вы действительно можете сделать, это проверить использование памяти при запуске приложения и его изменение.

Чтобы получить объем используемой памяти, вы можете сделать:

var initial_memory:Number = Number(System.totalMemory/1024).toFixed(2));

сделайте это в самом начале вашего приложения (т.е. когда все загрузится)

затем запустите Timer и используйте обработчик TimerEvent.TIMER или добавьте прослушиватель событий Event.ENTER_FRAME и сделайте следующее:

var current_memory:Number = Number(System.totalMemory/1024).toFixed(2));

Теперь у вас есть использование initial_memory, а также использование current_memory. Как вы решите использовать их, зависит от вас. Вы можете вычесть initial_memory из current_memory, чтобы получить дельту. Вы можете отобразить их в текстовом поле на сцене, записать их в консоль FireBug или отследить в окне вывода.

Тогда просто нажмите вокруг. Если вы делаете что-то, что увеличивает память, это нормально. Но если у вас есть что-то, что должно быть выгружено, а его нет, значит, у вас есть утечка.

2 голосов
/ 12 февраля 2010

Джун Хиндер представил основы Profiler на презентации 360 | Flex в '09 ... или, может быть, это был '08 ... в любом случае, я бы посоветовал изучить основы Profiler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...