我的 Flash 应用程序有问题,因为它运行一段时间后,它最终开始变慢。我的应用程序涉及需要使用 addChild() 方法复制的内容。我在互联网上阅读了一些信息,其中指出应用程序变慢或滞后的原因是 removeChild() 没有从内存中删除孩子。
有什么方法可以让我把孩子从记忆中移除吗?任何输入表示赞赏。谢谢。
我的 Flash 应用程序有问题,因为它运行一段时间后,它最终开始变慢。我的应用程序涉及需要使用 addChild() 方法复制的内容。我在互联网上阅读了一些信息,其中指出应用程序变慢或滞后的原因是 removeChild() 没有从内存中删除孩子。
有什么方法可以让我把孩子从记忆中移除吗?任何输入表示赞赏。谢谢。
查看Grant Skinner 撰写的这篇关于 AS3 资源管理的3 部分文章。
看起来您正在创建新对象,将其添加到舞台并从舞台中删除不需要的对象,这可能会导致速度变慢,因为内存中会有很多不需要的对象。在 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);