今天偶然发现removeChildAt非常消耗性能,当我连续点击stage以生成sprite实例时,fps直接降到5以下,
使用removeChildren来删除时,fps几乎保持不变!
当然,我这种测试可能会有片面性,大家若有其他类似测试结果,请告诉我!
下面是代码,大家可以测试一下!
package { import flash.display.DisplayObject; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import langyan.CustomClass.StatsFps; [SWF(frameRate="24")] public class TestFPs extends Sprite { private var _box:Sprite; public function TestFPs() { this.addEventListener(Event.ADDED_TO_STAGE, addStageHandler) } private function addStageHandler(event:Event):void { _box = new Sprite(); this.addChild(new StatsFps()); this.addChild(_box); _box.x = 200; stage.addEventListener(MouseEvent.CLICK, addBoxHandler) } private var _count:int=0; private function addBoxHandler(event:MouseEvent):void { _count++; trace("add",_count); var newBox:Sprite; var len:int = _box.numChildren; var curBox:DisplayObject; if (len > 1) { for (var i:int = 0; i < len; i++) { /* curBox=_box.getChildAt(0);*/ _box.removeChildAt(0); /* curBox = null;*/ } /* _box.removeChildren(0,len-1);*/ } for (var i:int = 0; i < 10000; i++) { newBox = new Sprite(); _box.addChild(newBox); } } } }