2010-02-11 5 views
3

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

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

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

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

ответ

4

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

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

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

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

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

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

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

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

+0

Спасибо. Это то, что мне нужно. –

2

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

5

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

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

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

Смежные вопросы