2013-11-22 1 views
0

, когда наша флеш-игра находится в сцене A, память стабильна около 800 М (она загружает почти все анимации роли и анимацию ролевых навыков). Но когда переключается на сцену B, память продолжает увеличиваться до 1400M за одну минуту. Я наблюдал за проводником и следил за тем, чтобы он не загружал какой-либо ресурс, когда память увеличивается. И когда я повторяю это, память увеличивается до 2000 М, а проводник замораживается, страница разбилась.То, что может вызвать сильную утечку памяти за короткое время

Итак, что может вызвать утечку памяти в течение короткого промежутка времени? Я раньше не встречал такой проблемы, любая помощь будет оценена.

+0

Это немного похоже на игру с шарадами, мы все могли просто догадываться, но это не так эффективно. Надеюсь, вы поймете части своей игры, которые принимают до 800 Мбайт памяти, и сможете определить, удаляются ли вещи, которые больше не нужны из сцены A, когда вы переходите на сцену B. Меньшие утечки памяти немного сложнее определить, но, конечно, это не должно быть слишком сложно с пониманием активы вашей игры. – prototypical

ответ

1

Вопрос не дает достаточно конкретной информации о том, что вы делаете, и поэтому трудно точно, что вы делаете неправильно.

Но есть способы борьбы с этими ситуациями:

Установка Adobe Scout (http://gaming.adobe.com/technologies/scout/). Это действительно хороший инструмент для профилирования, который поможет вам понять, что происходит в вашем приложении.

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

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

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

0

Если вы используете FlashBuilder, вы можете запустить профилировщик, чтобы попытаться отследить утечки памяти и посмотреть, сколько экземпляров создается. Существуют другие инструменты профилирования, если вы используете другой тип IDE.

При использовании Flash Professional вы можете проверить эту ссылку Profiling tools in flash builder to improve the performance of flash professional projects

0

После работы за несколько дней, мы, наконец, выяснить проблему.

Прежде чем задать вопрос, я пробовал скаут и профиль, но не работал (потому что проблема не возникает). Я думаю, только bitmapdata draw или copypixels functon вызывается в бесконечном цикле, или в обработчике событий enterframe может возникать такая быстрая и большая утечка памяти.

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

Итак, вот процедура, которую мы решаем, после того, как мы смогли повторить проблему.

  1. Запустите игру в профиль и сделайте снимок памяти.

  2. повторите проблему, после того, как память значительно увеличится, возьмите снимок памяти.

  3. найти сломанные объекты между моментальным снимком памяти.

Наконец, проблема заключается в том, что функция вызывается в каждом кадре, когда появляется один навык.И в функции битмапдата была использована для рисования роли анимации

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