Prueba de rendimiento: Clase Vector vs Clase Array

Flash Player 10 introduce la clase Vector, la cual permite un acceso de lectura y escritura más rápido que el de la clase Array.

Una simple prueba nos mostrará los beneficios de la clase Vector sobre la clase Array, el siguiente código será usado para probar la clase Array:

var inicio:int = getTimer();
var arrTest:Array = new Array();
 
for (var i:int = 0; i < 9999999; i++)
{
	arrTest[i] = i;
}
 
trace('>>> tiempo Array: ', getTimer() - inicio);

El siguiente código será usado para probar la clase Vector:

var inicio:int = getTimer();
var vecTest:Vector.<int> = new Vector.<int>();
 
for (var i:int = 0; i < 9999999; i++) 
{
	vecTest[i] = i;
}
 
trace('>>> tiempo Vector: ', getTimer() - inicio);

El ejemplo anterior puede optimizarse asignando un tamaño fijo al Vector:

var inicio:int = getTimer();
var vecFixed:Vector.<int> =  new Vector.<int>(this.MAX_VALUE, true)
 
for (var i:int = 0; i < 9999999; i++) 
{
	vecFixed[i] = i;
}
 
trace('>>> tiempo Vector Fixed: ', getTimer() - inicio);

La clase final que se usará para realizar las 3 pruebas será la siguiente:

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.utils.getTimer;
 
	public class Main extends Sprite 
	{
		private const MAX_VALUE:int = 9999999;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			this.testArray();
			this.testVector();
			this.testVectorFixed();
		}
 
		private function testArray():void
		{
			var inicio:int = getTimer();
			var arrTest:Array = new Array();
 
			for (var i:int = 0; i < this.MAX_VALUE; i++)
			{
				arrTest[i] = i;
			}
 
			trace('>>> tiempo Array: ', getTimer() - inicio);
		}
 
		private function testVector():void
		{
			var inicio:int = getTimer();
			var vecTest:Vector.<int> = new Vector.<int>();
 
			for (var i:int = 0; i < this.MAX_VALUE; i++) 
			{
				vecTest[i] = i;
			}
 
			trace('>>> tiempo Vector: ', getTimer() - inicio);
		}
 
		private function testVectorFixed():void
		{
			var inicio:int = getTimer();
			var vecFixed:Vector.<int> =  new Vector.<int>(this.MAX_VALUE, true)
 
			for (var i:int = 0; i < this.MAX_VALUE; i++) 
			{
				vecFixed[i] = i;
			}
 
			trace('>>> tiempo Vector Fixed: ', getTimer() - inicio);
		}
	}
}

Y los resultados obtenidos fueron:

>>> tiempo Array:  959
>>> tiempo Vector:  401
>>> tiempo Vector Fixed:  154

Como se puede apreciar, existe una gran diferencia entre cada uno de los métodos usados. Adobe en su sitio de rendimiento de la plataforma Flash, recomienda siempre que sea posible usar la clase Vector antes que Array.

Trackback URL for this post:

http://shadowjah.com/trackback/prueba_de_rendimiento_clase_vector_vs_clase_array