Проблемы с оптимизацией слайд-шоу - PullRequest
0 голосов
/ 17 марта 2011

ОК, если вы можете терпеть меня, это будет сложно (или нет, я не уверен). Мне было поручено сделать флэш-слайд-шоу, которое будет идти на мини-нетбуке, таком как ПК, подключенном к 32-дюймовому монитору. Способ его настройки заключается в том, что у меня есть флэш-файл, настроенный для работы в полноэкранном режиме, и папка с 11 изображениями в них и файлом XML. Флэш-файл извлекает изображения и, если необходимо, текст из файла XML. Некоторые изображения плоские (без текста), а некоторые настроены для динамического текста, в основном это приложение для цифровых вывесок .

Приложение работает нормально, проблема в том, что я не уверен, как оптимизировать его для долгосрочного использования. Изображения, загружаемые в него, имеют размер 1920x1080 и около 500k-1.2mb, но каждый цикл увеличивает объем системной памяти до такой степени, что происходит сбой из-за отсутствия доступной памяти.

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

Как я уже сказал, во флэш-файле все очень скудно, в нем есть 1 кадр с AS, то есть в библиотеке ничего нет, или все, что динамически генерируется, и я уверен, что это моя проблема, просто не знаю как это исправить.

Код:

Ссылка на код через Pastie

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

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

Действительно ценю помощь здесь, я действительно благодарю заранее.

Ответы [ 2 ]

1 голос
/ 17 марта 2011

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

1) Вы создаете новый Loaderобъекты каждый раз, когда таймер переключается, что означает, что вы получите много загрузчиков во время работы этой программы - и каждый загрузчик будет содержать экземпляр загруженного изображения.В вашем методе fadeSlideIn вы не удаляете прослушиватель Event.COMPLETE из загрузчика, поэтому каждый загрузчик останется в памяти навсегда.

2) Битовые карты, в частности, имеют некоторые особенности - я немного схематичен в отношенииподробнее, с тех пор, как я с этим справился, прошло довольно много времени, но я считаю, что когда вы очищаете растровое изображение, вы всегда должны выполнять myBitmap.bitmapData.dispose (), поскольку bitmapData не очень хорошо обрабатывает GC.

Вместо этого я бы, вероятно, загрузил бы все ваши изображения в массив, а затем перебрал массив.Вы не должны использовать загрузчик более одного раза для любого изображения.Вы можете попробовать использовать что-то вроде LoaderMax (https://www.greensock.com/loadermax/), чтобы упростить процесс загрузки.

Удачи, и дайте мне знать, если у вас есть дополнительные вопросы!

1 голос
/ 17 марта 2011

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

Я бы либо:

  • Не загружатьснова графику, так что просто используйте те, которые вы уже загрузили;
  • Когда изображение исчезнет с экрана, удалите все ссылки на него и отключите все слушатели (еще лучше используйте параметр useWeakReference ) и забудьтеЭто.Сборка мусора должна происходить автоматически.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...