Приложение Flash замедляется [removeChild] - PullRequest
0 голосов
/ 30 июля 2010

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

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

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Похоже, вы создаете новые объекты, добавляете их на сцену и удаляете ненужные объекты со сцены, что может привести к низкой скорости, так как в памяти будет много нежелательных объектов.Во flash 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);
1 голос
/ 30 июля 2010

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

...