【検証テスト】Array = [ ] vs Array.length = 0 ?

by selflash forked from Point.distance (diff: 122)
ソースは忘れたけど配列の初期化にはArray.length = 0;
の方がいい見たいな見かけたけど違ったみたい
検証の仕方間違っていたら誰か教えてください
追記 
510個以上の配列をクリアする時は Array.length = 0; がよい】
情報元 http://rest-term.com/archives/541/
♥0 | Line 66 | Modified 2010-02-16 02:03:36 | MIT License
play

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);
		}
	}
}

Forked