Flash приложението се забавя [removeChild]

Имам проблем с моето флаш приложение, защото след известно време, докато работи, в крайна сметка започва да се забавя. Приложението ми включва нещо, което трябва да бъде копирано с метода addChild(). Прочетох някаква информация в интернет, която гласи, че причината за забавянето или забавянето на приложението е, че removeChild() не премахва детето от паметта.

Има ли някакви начини как мога да премахна и детето от паметта? Всички входове се оценяват. Благодаря.


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


Отговори (2)


Вижте тази статия от 3 части за управление на ресурси в 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