vector.length=0で使いまわすのとnewして使いまわすの

by yasurageruheya
環境によって速度に差が出そう。気持ちの問題で使い分ける?
♥0 | Line 135 | Modified 2015-01-30 14:28:28 | MIT License
play

ActionScript3 source code

/**
 * Copyright yasurageruheya ( http://wonderfl.net/user/yasurageruheya )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/axIL
 */

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	public class FlashTest extends Sprite {
		
		public const LOOP:int = 100;
		
		public const txt:TextField = new TextField();
		
		public var vec:Vector.<TestObject> = new Vector.<TestObject>();
		
		public var tests:Vector.<Tester> = new Vector.<Tester>();
		
		public function FlashTest() {
			
			tests[tests.length] = new Tester("10個 length = 0: ", function():void
			{
				var i:int = LOOP;
				var j:int;
				while (i--)
				{
					vec.length = 0;
					j = 10;
					while (j--)
					{
						vec[vec.length] = new TestObject();
					}
				}
			});
			
			tests[tests.length] = new Tester("10個 new: ", function():void
			{
				var i:int = LOOP;
				var j:int;
				while (i--)
				{
					vec = new Vector.<TestObject>();
					j = 10;
					while (j--)
					{
						vec[vec.length] = new TestObject();
					}
				}
			});
			
			tests[tests.length] = new Tester("100個 length = 0: ", function():void
			{
				var i:int = LOOP;
				var j:int;
				while (i--)
				{
					vec.length = 0;
					j = 100;
					while (j--)
					{
						vec[vec.length] = new TestObject();
					}
				}
			});
			
			tests[tests.length] = new Tester("100個 new: ", function():void
			{
				var i:int = LOOP;
				var j:int;
				while (i--)
				{
					vec = new Vector.<TestObject>();
					j = 100;
					while (j--)
					{
						vec[vec.length] = new TestObject();
					}
				}
			});
			
			tests[tests.length] = new Tester("1000個 length = 0: ", function():void
			{
				var i:int = LOOP;
				var j:int;
				while (i--)
				{
					vec.length = 0;
					j = 1000;
					while (j--)
					{
						vec[vec.length] = new TestObject();
					}
				}
			});
			
			tests[tests.length] = new Tester("1000個 new: ", function():void
			{
				var i:int = LOOP;
				var j:int;
				while (i--)
				{
					vec = new Vector.<TestObject>();
					j = 1000;
					while (j--)
					{
						vec[vec.length] = new TestObject();
					}
				}
			});
			
			tests.reverse();
			txt.width = 500;
			addChild(txt);
			
			// write as3 code here..
			addEventListener(Event.ENTER_FRAME, test);
		}
		
		private function test(e:Event):void 
		{
			var str:String = "";
			var i:int = tests.length;
			while (i--)
			{
				str += tests[i].start();
			}
			txt.text = str;
		}
	}
}

class TestObject
{
	public function TestObject(){}
}

import flash.utils.getTimer;
class Tester
{
	public var time:Number = 0;
	
	public var name:String;
	
	public var test:Function;
	
	public var count:int = 1;
	
	public function start():String
	{
		const startTime:int = getTimer();
		test();
		time += getTimer() - startTime;
		return name + (time / (count++)) + " ms.\n";
	}
	
	public function Tester(name:String, test:Function)
	{
		this.name = name;
		this.test = test;
	}
}