Retomando un poco las novedades de Adobe FlashCS4, quiero mencionar otra característica que no ha tomado mucho hype hasta ahora, a tal grado que en muchos tipos de experimentos, o pruebas de rendimiento no se explota su potencial.
Parece que pocos conocen acerca de la nueva clase Vector.
Un vector es un conjunto de elementos que comparten el mismo tipo de datos (base del tipo de vectores), similar a lo que hace un Array solo que con la diferencia de que este ultimo puede almacenar elementos de distintos tipos de información. Ademas, de que la base del tipo del vector puede ser de cualquier tipo único, incluyendo alguno que haya sido construido en una clase personalizada.
Si en algún caso es requerido almacenar datos en una matriz donde todos sus elementos tienen el mismo tipo de datos, te recomiendo usar un Vector para ello en lugar de un Array, tan solo recuerda que hasta ahora solo es soportada en Flash Player 10, AIR 1.5.
Array vs Vector
Cree esta sencilla función la cual crea un bucle de 10 millones de ciclos, y dentro de cada uno añade un valor aleatorio entre 0 y 100 con Math.random() por lo que este valor puede incluir decimales muy minuciosos:
Código :
var length:int = 10000000;
var v:Vector.<int> = new Vector.<int>(length, true);
var a:Array = new Array(length);
function checkPerfomance(object, loop:int):Number {
var startTime:Number = getTimer();
var finalTime:Number;
for (var i:int = 0; i < loop; i++)
{
object[i] = Math.random() * 100;
if(i + 1 == loop){finalTime = Number(getTimer() - startTime) /1000;}
}
//
return finalTime;
};
//
trace(checkPerfomance(v, length)); // 3.297
trace(checkPerfomance(a, length)); // 8.086
trace(3.297/8.086) * 100 + "%");
// 40.77417759089785 %
Es genial cuando notas que la introducción de la clase Vector, en este tipo de acciones es cerca de un 40% mas rápido.
Conclusión
Esa parte te toca a ti darla, puedes probar con diferentes ciclos y/o valores aleatorios para que lo confirmes. ¿Seguirás utilizando para todo Array por desconocimiento?
A mi me gusta más manejar Vectores que Arreglos, en un arreglo siempre debes definir su tamaño y si no lo usas es espacio en memoria que estas ocupando. En cambio con los vectores no es necesario definir el tamaño, simplemente vas agregando o quitando los valores y no creas basura dentro de la memoria, es más dinámico que un arreglo. Por:daz_angie
Acabo de notar por un informe anónimo, que ni siquiera recordé agregarle titulo al post. Que pena me doy. Por:M@U
Interesante prueba M@U. Sin embargo para tu mala suerte la lei.
M@U :
Acabo de notar por un informe anónimo, que ni siquiera recordé agregarle titulo al post. Que pena me doy.
Lo del título de te lo perdono. Pero lo del 40% no que no. Según tu prueba, vectores es 60% mas rápido, no 40% como tu dices. Ese cuarenta es la parte que es respecto a la mayor.
En otras palabras, si tengo cien monedas, y tu tienes cuarenta. Yo diría que tienes 60% menos monedas que yo, porque tienes solo el 40% mio. Por:Dano
M@U :
Acabo de notar por un informe anónimo, que ni siquiera recordé agregarle titulo al post. Que pena me doy.
Conocia la clase y la uso, pero aun no logro hacer un sort con un vector, por lo que uso arrays para esto... sera que podrias hacer un ejemplo de esto.
gracias Por:Daniel Rodriguez-blog
Esta clase es muy importante para los nuevos métodos de manipulación de objetos 3D de Flash Player 10. Me estoy documentando extensamente sobre ello.
Lo del título de te lo perdono. Pero lo del 40% no que no. Según tu prueba, vectores es 60% mas rápido, no 40% como tu dices. Ese cuarenta es la parte que es respecto a la mayor.
Juas! Creí que alguien borraría el post que di acerca del titulo en charla. ¿Que paso con el apoyo?
Y tienes mucha razón con lo que dices Dano, al poner el valor menor respecto al mayor tuve que haber escrito 40% mas lento hacia la clase Array. Buena observación y un tanto importante, ¿algún editor puede arreglar ese detalle?, seguro hará relucir un poco mas a Vector. Por:M@U
daz_angie :
A mi me gusta más manejar Vectores que Arreglos, en un arreglo siempre debes definir su tamaño y si no lo usas es espacio en memoria que estas ocupando. En cambio con los vectores no es necesario definir el tamaño, simplemente vas agregando o quitando los valores y no creas basura dentro de la memoria, es más dinámico que un arreglo.
En los Array puedes o NO definir el tamaño del arreglo
Err, de hecho no es exacto del todo. Al generar Math.random() * 100, eso es de tipo Number, y el vector tiene que convertirlo a int. Eso puede dar algunos milisegundos de diferencia. Por:Zah
Zah :
Err, de hecho no es exacto del todo. Al generar Math.random() * 100, eso es de tipo Number, y el vector tiene que convertirlo a int. Eso puede dar algunos milisegundos de diferencia.