【検証テスト】Array = [ ] vs Array.length = 0 ?
forked from Point.distance (diff: 122)
ソースは忘れたけど配列の初期化にはArray.length = 0; の方がいい見たいな見かけたけど違ったみたい 検証の仕方間違っていたら誰か教えてください 追記 510個以上の配列をクリアする時は Array.length = 0; がよい】 情報元 http://rest-term.com/archives/541/
ActionScript3 source code
/**
* Copyright selflash ( http://wonderfl.net/user/selflash )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/na81
*/
// forked from alumican_net's Point.distance
// ソースは忘れたけど配列の初期化にはArray.length = 0;
// の方がいい見たいな見かけたけど違ったみたい
// 検証の仕方間違っていたら誰か教えてください
//
//追記
// 510個以上の配列をクリアする時は Array.length = 0; がよい】
// 情報元 http://rest-term.com/archives/541/
package {
import flash.display.*;
import flash.geom.Point;
import flash.text.*;
import flash.utils.*;
public class Main extends Sprite {
private var _array1:Array = [];
private var _array2:Array = [];
private var _array3:Array = [];
private var _array4:Array = [];
//----------------------------------*
// Constractor
//----------------------------------*
public function Main():void {
//-------- max number ------------------*
var n:uint = 10000;
_setup();
//-------- Array test1 ------------------*
_array1 = new Array(n);
_measure("Array = [ ]", function ():void {
_array1 =[];
for(var i:uint = 0; i < n; ++i) {
_array1.push(new Point((Math.random() - 0.5) * 1000,(Math.random() - 0.5) * 1000));
}
}, 100, _array1);
//-------- Array test2 ------------------*
_array2 = new Array(n);
_measure("Array.length = 0", function ():void {
_array2.length = 0;
for(var i:uint = 0; i < n; ++i) {
_array2.push(new Point((Math.random() - 0.5) * 1000,(Math.random() - 0.5) * 1000));
}
}, 100, _array2);
//-------- Array test3 ------------------*
_array3 = new Array(n);
_measure("Array = new Array(n)", function ():void {
_array3 = new Array(n);
for(var i:uint = 0; i < n; ++i) {
_array3.push(new Point((Math.random() - 0.5) * 1000,(Math.random() - 0.5) * 1000));
}
}, 100, _array3);
//-------- Array test4 ------------------*
_array4 = new Array(n);
_measure("Array.splice(0, Array.length)", function ():void {
_array4.splice(0, _array4.length);
for(var i:uint = 0; i < n; ++i) {
_array4.push(new Point((Math.random() - 0.5) * 1000,(Math.random() - 0.5) * 1000));
}
}, 100, _array4);
}
//----------------------------------*
// measure
//----------------------------------*
private function _measure(title:String, func:Function, numTimes:uint, array:Array, ...params):void {
_time = getTimer();
for (var i:int = 0; i < numTimes; i++) {
func.apply(null, params);
}
_time = getTimer() - _time;
_debug("[ " + title + " ] " + "Array.length = " + array.length + " --> " + _time + " ms");
}
//----------------------------------*
// debug
//----------------------------------*
private function _debug(log:String):void {
_field.appendText(log + "\n");
}
//----------------------------------*
// Text
//----------------------------------*
private var _field:TextField;
private var _time:uint;
private function _setup():void {
_field = new TextField();
_field.width = stage.stageWidth;
_field.height = stage.stageHeight;
var format:TextFormat = _field.defaultTextFormat;
format.font = "_sans";
_field.defaultTextFormat = format;
addChild(_field);
}
}
}