最適化Tips concat()を使うと配列を高速にコピーできる mtok forked:0favorite:2lines:78license : All rights reserved modified : 2009-01-30 03:49:11 Embed Tweet <?xml version="1.0" encoding="utf-8" ?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="appCompleteHandler(event)"> <mx:Script> <![CDATA[ import flash.events.MouseEvent; import mx.events.FlexEvent; import mx.controls.Alert; import flash.system.Capabilities; import flash.utils.getTimer; import flash.geom.Point; import flash.utils.ByteArray; public function appCompleteHandler(event:FlexEvent):void{ if(Capabilities.isDebugger){ var msg:String = "デバッグ版のプレーヤを使用しています。正しいベンチマークの結果を得るにはリリース版を使用することをお勧めします。"; Alert.show(msg, "インフォメーション"); } console.text += "OS : " + Capabilities.os + "\n"; console.text += "Vesion : " + Capabilities.version + "\n"; console.text += "Type : " + Capabilities.playerType + "\n"; Capabilities.isDebugger ? console.text += "Debug version\n" : null; } public function clickHandler(event:MouseEvent):void{ startBenchmark(); } public function clear(event:MouseEvent):void { console.text = ""; } public function startBenchmark():void{ var time:int; var dt:int; var i:int; var p:Point; var ary:Array = []; for (i = 0; i < 500000; i++) { ary.push(Math.random() * 500000); } console.text += "List Length " + ary.length +"\n"; //for loop array push time = getTimer(); var copy:Array = []; for (i = 0; i < ary.length; i++) { copy.push(ary[i]); } dt = getTimer() - time; console.text += "forループで一つづつ要素をpushしてコピー" + dt + "ms\n"; // time = getTimer(); var copy2:Array = []; for (i = 0; i < ary.length; i++) { copy2[i] = ary[i]; } dt = getTimer() - time; console.text += "forループで配列インデックスを使用してしてコピー" + dt + "ms\n"; //ByteArray を使ったコピー time = getTimer(); var ba:ByteArray = new ByteArray(); ba.writeObject(ary); ba.position = 0; var copy3:Array = ba.readObject(); dt = getTimer() - time; console.text += "ByteArrayを使ったコピー" + dt + "ms\n"; //slice を使ったコピー time = getTimer(); var copy4:Array = ary.slice(0, ary.length); dt = getTimer() - time; console.text += "sliceを使ったコピー" + dt + "ms\n"; //concat を使ったコピー time = getTimer(); var copy5:Array = ary.concat(); dt = getTimer() - time; console.text += "concatを使ったコピー" + dt + "ms\n"; console.text += "\n"; } ]]> </mx:Script> <mx:VBox width="100%" height="100%"> <mx:TextArea id="console" width="100%" height="100%"></mx:TextArea> <mx:HBox width="100%"> <mx:Button label="Start" click="clickHandler(event)" /> <mx:Button label="Clear" click="clear(event)" /> </mx:HBox> </mx:VBox> </mx:Application> Code Fullscreen Preview Fullscreen hacker_alqfx.. hikipuro : optimize optimize Capabilities.version