¿Quieres registrarte?

Experimentos con Arrays y Vectores

Por: M@U + 21 de Enero del 2009

Retomando un poco las novedades de Adobe Flash CS4, 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?

Enviar a twitter Enviar a facebook

También te interesa


Etiquetas hack matematicas programacion

Comentarios | Enviar un comentario
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. :lol:

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.
:(

¿Cual anonimo? U_U fui yo U_U
Por: daz_angie
Deberías haber hecho un vector de Number, no de int (aunque no creo que influya en el resultado)
Por: Eliseo-blog
Wow!
Desconocía totalmente esta nueva clase.
Seguro que nos ayuda mucho.

Tx
Por: Andros
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.

Buen tip! (y)
Por: Juanlu_001

Dano :

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?
:lol:

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 ^^

Buen tip
Por: eldervaz
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.
Y apaleado debería ser yo por ello.
:D
Por: M@U
esto esta muy bueno! O_O
Genial tip M@U, me servirá mucho ^^ .
Por: Otaku RzO
que poco se de AS3... y de vectores. Pero comienzo a odiar esa palabra.
Por: tomasdev
porfavor pongan experimentos de ustedes de vector
Por: cristel-blog
no me ayudaste en nada
Por: jaime-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.