Flash应用程序速度减慢[removeChild]

时间:2010-07-30 05:03:28

标签: flash performance removechild lag

我的Flash应用程序有问题,因为在运行一段时间后,它最终开始变慢。我的应用程序涉及需要使用addChild()方法复制的内容。我已经在互联网上阅读了一些信息,其中说明应用程序减慢或滞后的原因是removeChild()不会将子项从内存中删除。

我是否有办法将孩子从记忆中移除?任何投入都表示赞赏。感谢。

2 个答案:

答案 0 :(得分:1)

通过Grant Skinner查看AS3中资源管理的3-part article

答案 1 :(得分:1)

看起来您正在创建新的对象,将其添加到舞台并从舞台中删除不需要的对象,这可能会导致速度变慢,因为内存中会有大量不需要的对象。在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);