Vector 走査のベンチマーク
♥3 |
Line 82 |
Modified 2009-02-14 19:50:50 |
MIT License
archived:2017-03-09 04:16:35
ActionScript3 source code
/**
* Copyright alpicola ( http://wonderfl.net/user/alpicola )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/gy7a
*/
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
initialize="init()">
<mx:Script>
<![CDATA[
//forked from zahir's n乗倍の計算をMath.powとfor文とで比較してみるの事
private const yn:String = "\n";
private const str:String = "Vector 走査のベンチマーク" + yn + "10000 個の数の和を求める" + yn + yn;
private var vec:Vector.<Number> = new Vector.<Number>(10000);
private var sum:Number;
private function init():void {
for (var i:int = 0; i < 10000; i++) vec[i] = Math.random();
txt.text = str;
}
private function start():void {
var n:int = Number(loop.text);
benchmark("for", forSum, this, n);
benchmark("for .. in", forInSum, this, n);
benchmark("for each .. in", forEachInSum, this, n);
benchmark("while", whileSum, this, n);
benchmark("forEach (anonymous func)", forEachAnonymousSum, this, n);
benchmark("forEach (declared func)", forEachDeclaredSum, this, n);
benchmark("forEach (method)", forEachMethodSum, this, n);
txt.text += yn;
}
private function benchmark(name:String, callback:Function, thisObject:* = null, times:uint = 1):void {
var t:uint = getTimer();
for (var i:int = 0; i < times; i++) {
callback.call(thisObject);
}
txt.text += name + ": " + (getTimer() - t) + " ms (" + callback.call(thisObject) + ")" + yn;
}
private function clear():void {
txt.text = str;
}
private function forSum():Number {
var re:Number = 0;
for (var i:int = 0, length:int = vec.length; i < length; i++) { re += vec[i] }
return re;
}
private function forInSum():Number {
var re:Number = 0;
for (var i:String in vec) { re += vec[i] }
return re;
}
private function forEachInSum():Number {
var re:Number = 0;
for each (var n:Number in vec) { re += n }
return re;
}
private function whileSum():Number {
var re:Number = 0;
var n:int = vec.length;
while (n--) { re += vec[n] }
return re;
}
private function forEachAnonymousSum():Number {
var re:Number = 0;
vec.forEach(function(n:Number, i:int, v:Vector.<Number>):void { re += n });
return re;
}
private function forEachDeclaredSum():Number {
var re:Number = 0;
vec.forEach(add);
return re;
function add(n:Number, i:int, v:Vector.<Number>):void { re += n }
}
private function forEachMethodSum():Number {
sum = 0;
vec.forEach(addMethod);
return sum;
}
private function addMethod(n:Number, i:int, v:Vector.<Number>):void {
sum += n;
}
]]>
</mx:Script>
<mx:TextArea left="10" right="10" top="10" bottom="45" id="txt"/>
<mx:Button bottom="15" label="start" click="start()" right="73"/>
<mx:Button bottom="15" label="clear" click="clear()" right="10"/>
<mx:TextInput id="loop" left="10" bottom="15" width="40" textAlign="right" text="100"/>
<mx:Label text="回繰り返す" bottom="15" left="50"/>
</mx:Application>