我的闪存应用程序出现问题,因为一段时间后它正在运行,它最终开始变慢。我的应用程序涉及需要使用addChild()方法复制的内容。我已经阅读了互联网上的一些信息,其中指出,应用程序放缓或滞后的原因是removeChild()不会从存储器中删除子项。Flash应用程序变慢[removeChild]
有没有什么方法可以将孩子从记忆中移除呢?任何输入赞赏。谢谢。
我的闪存应用程序出现问题,因为一段时间后它正在运行,它最终开始变慢。我的应用程序涉及需要使用addChild()方法复制的内容。我已经阅读了互联网上的一些信息,其中指出,应用程序放缓或滞后的原因是removeChild()不会从存储器中删除子项。Flash应用程序变慢[removeChild]
有没有什么方法可以将孩子从记忆中移除呢?任何输入赞赏。谢谢。
查看这个3-part article关于AS3资源管理的格兰特斯金纳。
看起来您正在创建新对象,并将其添加到舞台上,并从舞台上删除不需要的对象,这可能会导致速度变慢,因为内存中会有大量不需要的对象。在闪存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);