Приложение Flash замедляется [removeChild]

У меня проблема с моим флеш-приложением, потому что через некоторое время оно начинает работать медленнее. В моем приложении есть что-то, что нужно воспроизвести с помощью метода addChild(). Я прочитал некоторую информацию в Интернете, в которой говорится, что причиной замедления или задержки в приложении является то, что removeChild() не удаляет дочерний элемент из памяти.

Есть ли способы, как я могу удалить ребенка из памяти? Любые входы приветствуются. Спасибо.


person Smiley    schedule 30.07.2010    source источник


Ответы (2)


Ознакомьтесь с этой статьей из трех частей об управлении ресурсами в AS3. Грант Скиннер.

person heavilyinvolved    schedule 30.07.2010

Похоже, вы создаете новые объекты, добавляя их на свою сцену и удаляя ненужные объекты со сцены, что может привести к снижению скорости, так как в памяти будет много нежелательных объектов. Во флэш-памяти AS3 вы не можете полностью полагаться на GC для очистки мусора. Таким образом, лучший подход состоит в том, чтобы генерировать как можно меньше мусора и перерабатывать неиспользуемые объекты всякий раз, когда вам нужен новый объект.
Например, приложение постоянно выставляет на сцену какие-то круги и убирает некоторые из них через фиксированный интервал времени. Итак, для такого рода ресурсов реализуйте пул ресурсов.

 public class ResourcePool {
  static function getCircle(prop:Object):Circle {
    //check if you already have some circle objects
    //if yes pick one apply the prop and return
    // else create a new circle with specified prop and return
  }
  static function recycle(circle:Circle):void {
    //add it to available resource array
  }
}
Теперь, когда вам нужен объект круга, запросите его у ResourcePool:
 var c:Circle = ResourcePool.getCircle(someProperty);
И всякий раз, когда вы удаляете круг, перерабатывайте его должным образом, чтобы его можно было использовать позже.
//remove circle1 object
ResourcePool.recycle(circle1);

person bhups    schedule 30.07.2010