Skip to content

Instantly share code, notes, and snippets.

@skozin
Created February 9, 2013 20:47
Show Gist options
  • Save skozin/4747047 to your computer and use it in GitHub Desktop.
Save skozin/4747047 to your computer and use it in GitHub Desktop.
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