мы можем знать, что "съесть" больше всего памяти в SWF? (flash, as3, отладчик монстров?) - PullRequest
0 голосов
/ 16 октября 2011

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

мой проект работает нормально, но если я перезапущу SWF, когда он уже запущен (cmd + enter -> swf запущен, затем cmd + enter), этокажется, дает мне пример того, как это было бы, если бы я был на очень очень медленном компьютере, а это «очень» медленно.

Так есть ли возможность узнать, что я могу удалить, чтобы сохранить память?

Я использую несколько tweenlite, без звука, и я загружаю все свои страницы (5), которые содержат очень простой контент, в начале, поэтому во время предварительной загрузки ...

спасибо заВаша помощь; -)

Приветствия

Ответы [ 2 ]

1 голос
/ 17 октября 2011

Обычно инструмент, который анализирует производительность, называется «профилировщик».«Отладчик» обычно означает программу, которую вы используете для поиска ошибок в коде при его выполнении.

Flash player, версия отладчика, имеет API для профилирования.У этих API есть несколько интерфейсов, один, как упоминал Илья, во FlashDevelop, здесь есть еще один: http://code.google.com/p/flashpreloadprofiler/.И, если вы действительно хотите, вы можете написать одну из своих / исследовать определенные части вашего приложения так же, как вы пишете код, используя следующие функции: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/sampler/package-detail.html.

Способ, которым вы описываетекак вы компилируете SWF, похоже, что вы используете Flash CS # для этого.Flash CS # имеет свой собственный отладчик (но без профилировщика).Поэтому, если вам нужен отладчик, стоит проверить и тот, который поставляется вместе с программой.IIRC это Ctrl + Shift + Enter.

1 голос
/ 17 октября 2011

Пожалуйста, будьте более конкретны - что вы подразумеваете под «памятью»?

Я действительно не специалист по Monster Debugger, но, похоже, у него нет инструментов для решения таких проблем (по крайней мере, нетссылки на веб-сайте, но это one )

Для статистики использования оперативной памяти вы можете использовать отладчик FlashDevelop (бесплатно) столько же, сколько и Flash Builder (вы должны приобрести его, если будете его использовать, но также идоступна долгосрочная пробная версия).

Но ОЗУ - не единственный ресурс.Время ЦП также важно (с моей точки зрения это главная проблема со вспышкой).Flash Builder также позволяет вам профилировать вашу производительность (чтобы профилировать - это получить статистику: какие функции вызываются чаще всего, какие из них занимают большую часть времени для выполнения).Также вы можете добавить некоторый код для сбора статистики - это не так сложно - просто используйте getTimer () и посмотрите разницу до и после некоторого блока кода (но вы должны догадаться, где может быть проблема с производительностью, потому что это не так просто покрытьвы кодируете измерения вручную).

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

Обновление Об removeEventListener.В большинстве случаев вы должны связать каждый addEventListener с соответствующим removeEventListener.Обычно я добавляю слушателей на ADDED_TO_STAGE и удаляю их в REMOVED_FROM_STAGE:

function GameObject() // constructor
{
  m_sprite = new MySprite()//...
  // use weak listener (last argument) if there is a way m_sprite will never be attached to stage
  m_sprite.addEventListener( Event.ADDED_TO_STAGE, OnAttached, false, 0, true );
}

private function OnAttached( e:Event ):void
{
  m_sprite.removeEventListener( Event.ADDED_TO_STAGE, OnAttached ) ;
  m_sprite.addEventListener( Event.REMOVED_FROM_STAGE, OnDetached );
  m_sprite.addEventListener( MouseEvent.ROLL_OVER, OnOver );
  m_sprite.addEventListener( MouseEvent.ROLL_OUT, OnOut );
  m_sprite.addEventListener( Event.ENTER_FRAME, OnEnterFrame );
}

private function OnDetached(e:Event):void
{
  m_sprite.removeEventListener( Event.ENTER_FRAME, OnEnterFrame );
  m_sprite.removeEventListener( MouseEvent.ROLL_OUT, OnOut );
  m_sprite.removeEventListener( MouseEvent.ROLL_OVER, OnOver );
  m_sprite.removeEventListener(Event.REMOVED_FROM_STAGE, OnDetached);
  m_sprite.addEventListener( Event.ADDED_TO_STAGE, OnAttached, false, 0, true );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...