Created
February 9, 2013 20:47
-
-
Save skozin/4747047 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package | |
{ | |
import flash.display.Sprite; | |
import flash.events.Event; | |
import flash.events.TimerEvent; | |
import flash.text.TextField; | |
import flash.text.TextFieldAutoSize; | |
import flash.text.TextFormat; | |
import flash.utils.Timer; | |
import flash.utils.getTimer; | |
[SWF(width = 400, height = 600)] | |
public class VectorVsArrayPerfTest extends Sprite | |
{ | |
private var _outTxt:TextField; | |
public function VectorVsArrayPerfTest() { | |
_outTxt = new TextField(); | |
_outTxt.defaultTextFormat = new TextFormat("Courier New", 10); | |
_outTxt.autoSize = TextFieldAutoSize.LEFT; | |
_outTxt.x = _outTxt.y = 5; | |
addChild(_outTxt); | |
out("performing initial delay..."); | |
var t:Timer = new Timer(1500, 1); | |
t.addEventListener(TimerEvent.TIMER, runTests); | |
t.start(); | |
} | |
private function out(msg:String):void { | |
trace(msg); | |
_outTxt.appendText(msg + "\n"); | |
} | |
private function runTests(e:Event):void { | |
var t:uint, i:int, NUM_ITEMS:uint = 1000000; | |
out("using " + NUM_ITEMS + " items"); | |
out("creation:"); | |
t = getTimer(); | |
var numArray:Array = new Array(NUM_ITEMS); | |
out(" Array: " + (getTimer() - t) + " ms"); | |
var stringArray:Array = new Array(NUM_ITEMS); | |
var customArray:Array = new Array(NUM_ITEMS); | |
t = getTimer(); | |
var numericVector:Vector.<Number> = new Vector.<Number>(NUM_ITEMS, true); | |
out(" Vector.<Number>: " + (getTimer() - t) + " ms"); | |
t = getTimer(); | |
var stringVector:Vector.<String> = new Vector.<String>(NUM_ITEMS, true); | |
out(" Vector.<String>: " + (getTimer() - t) + " ms"); | |
t = getTimer(); | |
var customVector:Vector.<CustomClass> = new Vector.<CustomClass>(NUM_ITEMS, true); | |
out(" Vector.<CustomClass>: " + (getTimer() - t) + " ms"); | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
out("population:"); | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
numArray[i] = 3; | |
} | |
t = getTimer() - t; | |
out(" numeric array: " + t + " ms"); | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
numericVector[i] = 3; | |
} | |
t = getTimer() - t; | |
out(" numeric vector: " + t + " ms"); | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
stringArray[i] = "3"; | |
} | |
t = getTimer() - t; | |
out(" string array: " + t + " ms"); | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
stringVector[i] = "3"; | |
} | |
t = getTimer() - t; | |
out(" string vector: " + t + " ms"); | |
var customInst:CustomClass = new CustomClass(); | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
customArray[i] = customInst; | |
} | |
t = getTimer() - t; | |
out(" custom array: " + t + " ms"); | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
customVector[i] = customInst; | |
} | |
t = getTimer() - t; | |
out(" custom vector: " + t + " ms"); | |
////////////////////////////////////////////////////////////////////////////////////////////////// | |
out("traversing"); | |
var sum:Number = 0, numValue:Number = 0, stringValue:String, customValue:CustomClass; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += numArray[i]; | |
} | |
t = getTimer() - t; | |
out(" numeric array (without cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += numericVector[i]; | |
} | |
t = getTimer() - t; | |
out(" numeric vector (without cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += Number(numArray[i]); | |
} | |
t = getTimer() - t; | |
out(" numeric array (with cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += Number(numericVector[i]); | |
} | |
t = getTimer() - t; | |
out(" numeric vector (with cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
numValue = numArray[i]; | |
sum += numValue; | |
} | |
t = getTimer() - t; | |
out(" numeric array (with intermediate var): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
numValue = numericVector[i]; | |
sum += numValue; | |
} | |
t = getTimer() - t; | |
out(" numeric vector (with intermediate var): " + t + " ms"); | |
/// | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += Number(stringArray[i].charAt(0)); | |
} | |
t = getTimer() - t; | |
out(" string array (without cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += Number(stringVector[i].charAt(0)); | |
} | |
t = getTimer() - t; | |
out(" string vector (without cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += Number(String(stringArray[i]).charAt(0)); | |
} | |
out(" string array (with cast): " + (getTimer() - t) + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += Number(String(stringVector[i]).charAt(0)); | |
} | |
t = getTimer() - t; | |
out(" string vector (with cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
stringValue = stringArray[i]; | |
sum += Number(stringValue.charAt(0)); | |
} | |
t = getTimer() - t; | |
out(" string array (with intermediate var): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
stringValue = stringVector[i]; | |
sum += Number(stringValue.charAt(0)); | |
} | |
t = getTimer() - t; | |
out(" string vector (with intermediate var): " + t + " ms"); | |
/// | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += customArray[i].someValue; | |
} | |
t = getTimer() - t; | |
out(" custom array (without cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += customVector[i].someValue; | |
} | |
t = getTimer() - t; | |
out(" custom vector (without cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += CustomClass(customArray[i]).someValue; | |
} | |
t = getTimer() - t; | |
out(" custom array (with cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
sum += CustomClass(customVector[i]).someValue; | |
} | |
t = getTimer() - t; | |
out(" custom vector (with cast): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
customValue = customArray[i]; | |
sum += customValue.someValue; | |
} | |
t = getTimer() - t; | |
out(" custom array (with intermediate var): " + t + " ms"); | |
sum = 0; | |
t = getTimer(); | |
for (i = 0; i < NUM_ITEMS; ++i) { | |
customValue = customVector[i]; | |
sum += customValue.someValue; | |
} | |
t = getTimer() - t; | |
out(" custom vector (with intermediate var): " + t + " ms"); | |
} | |
} | |
} | |
internal class CustomClass | |
{ | |
public function get someValue():Number { | |
return 10; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment