Amazing Lookups Optimization
/**
* Copyright dasdaniel ( http://wonderfl.net/user/dasdaniel )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/6Cin
*/
package
{
import flash.display.*;
import flash.utils.*;
import flash.text.*;
public class CastingLookups extends Sprite
{
private var __logger:TextField = new TextField();
private function row(...cols): void
{
__logger.appendText(cols.join(",") + "\n");
}
public function CastingLookups()
{
addChild(__logger);
var beforeTime:int;
var afterTime:int;
var noCastTime:int;
var castTime:int;
var item:MyItem;
var i:uint;
var len:uint = 10000000;
var itemsArray:Array = new Array(len);
var itemsVector:Vector.<MyItem> = new Vector.<MyItem>(len);
var itemsDictionary:Dictionary = new Dictionary();
var itemsObject:Object = new Object();
var itemsDynClass:Dynamic = new Dynamic();
for (i = 0; i < len; ++i)
{
itemsArray[i] =
itemsVector[i] =
itemsDictionary[i] =
itemsObject[i] =
itemsDynClass[i] = new MyItem();
}
row("Type", "No Cast Time", "Cast Time");
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsArray[i];
}
afterTime = getTimer();
noCastTime = afterTime-beforeTime;
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsArray[i] as MyItem;
}
afterTime = getTimer();
castTime = afterTime-beforeTime;
row("Array", noCastTime, castTime);
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsVector[i];
}
afterTime = getTimer();
noCastTime = afterTime-beforeTime;
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsVector[i] as MyItem;
}
afterTime = getTimer();
castTime = afterTime-beforeTime;
row("Vector", noCastTime, castTime);
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsDictionary[i];
}
afterTime = getTimer();
noCastTime = afterTime-beforeTime;
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsDictionary[i] as MyItem;
}
afterTime = getTimer();
castTime = afterTime-beforeTime;
row("Dictionary", noCastTime, castTime);
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsObject[i];
}
afterTime = getTimer();
noCastTime = afterTime-beforeTime;
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsObject[i] as MyItem;
}
afterTime = getTimer();
castTime = afterTime-beforeTime;
row("Object", noCastTime, castTime);
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsDynClass[i];
}
afterTime = getTimer();
noCastTime = afterTime-beforeTime;
beforeTime = getTimer();
for (i = 0; i < len; ++i)
{
item = itemsDynClass[i] as MyItem;
}
afterTime = getTimer();
castTime = afterTime-beforeTime;
row("Dynamic Class", noCastTime, castTime);
__logger.autoSize = TextFieldAutoSize.LEFT;
}
}
}
class MyItem{}
dynamic class Dynamic{}