Era broma, me estaba burlando del manejo de memoria de flash.

Ya hablando en serio...

Hagan el experimento anterior, pero creando nuevas instancias de la
clase String y string primitivas.

<code>
for(var i = 0; i < 1000; i++)
        this["a"+i+"_mc"] = new String()
</code>

ó 

<code>
for(var j = 0; j < 1000; j++)
        this["a"+i+"_mc"] = ""
</code>


Jaja, no me sorprende que lo que más le pesa a la memoria es cuando el
swf arrancam, más que la creación de cualquiera de los dos casos. Aunque
a la hora de crear la instancia con el constructor si se tarda mucho
más, aunque haciendo un cálculo rápido, si vas a llamar por lo menos a
dos métodos de String si conviene hacerlo así.

Saludos  

-----Mensaje original-----
De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] En
nombre de Hari Seldon
Enviado el: jueves, 14 de julio de 2005 11:21
Para: asnativos@5dms.com
Asunto: RE: [ASNativos] Una tontería

        Que yo sepa, no hay forma de controlar eso desde Flash...

        Pero si se puede "ahorrar" memoria creando o no creando
instancias
de clases, borrando instancias cuándo no sean necesarias, etc etc
etc....

        Por ejemplo, si no vas a usar ningún método de la clase String,
igual no necesitas crear tu variable como clase String... Etc etc etc...

        Si estás en un bucle, o en una función, será mejor que uses
variables locales y no con un scope más amplio....

        Vamos, que el uso de memoria en flash, aunque no puede
controlarse
"bien" como en C, si que con pequeñas cosas, puede optimizarse...

> -----Mensaje original-----
> De: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] En nombre de Quantium
> Enviado el: jueves, 14 de julio de 2005 4:45
> Para: asnativos@5dms.com
> Asunto: RE: [ASNativos] Una tontería
> 
> ¿Heap o Stack?
> 
> 
> 
> -----Mensaje original-----
> De: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] En nombre
> de Hari Seldon
> Enviado el: Miércoles, 13 de Julio de 2005 07:35 p.m.
> Para: asnativos@5dms.com
> Asunto: RE: [ASNativos] Una tontería
> 
>       Rendimiento... El más rápido? Y la memoria?.... 
> 
> > -----Mensaje original-----
> > De: [EMAIL PROTECTED] 
> > [mailto:[EMAIL PROTECTED] En nombre de Andrés 
> > González Aragón
> > Enviado el: miércoles, 13 de julio de 2005 19:14
> > Para: asnativos@5dms.com
> > Asunto: RE: [ASNativos] Una tontería
> > 
> > ¬¬ mmmmmm, pues, si quieres que jale rápido (rendimiento) 
> pues el más
> > rápido.
> > 
> > 
> > 
> > 
> > 
> > -----Mensaje original-----
> > De: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] En
> > nombre de Hari Seldon
> > Enviado el: jueves, 14 de julio de 2005 1:50
> > Para: asnativos@5dms.com
> > Asunto: RE: [ASNativos] Una tontería
> > 
> >     Lo de los tiempos es interesante... (Y lógico, por otro lado)
> > 
> >     El problema es, claro está, que de cara a rendimiento, que es
> > más
> > óptimo, ¿utilizar los constructores de clases, o bien utilizar
> > primitivas
> > directamente?
> >     
> >     Creo que es uno de los grandes problemas de todo lenguaje sin
> > tipado
> > fuerte.... ;)
> > 
> >     Saludos :)
> > 
> > > -----Mensaje original-----
> > > De: [EMAIL PROTECTED] 
> > > [mailto:[EMAIL PROTECTED] En nombre de Andrés 
> > > González Aragón
> > > Enviado el: miércoles, 13 de julio de 2005 9:37
> > > Para: asnativos@5dms.com
> > > Asunto: RE: [ASNativos] Una tontería
> > > 
> > > Órale Joseba, que interesante lo que comentas de los 
> > tiempos, no sabía
> > > eso. Aunque estuve haciendo algunos experimentos, con la 
> > > clase(y el tipo
> > > primitivo) Number igual se tarda el doble; pero con Array es 
> > > diferente,
> > > miremos este ejemplo:
> > > 
> > > <code>
> > > trace("\nARRAY");
> > > var primitiv_array:Array = ["mnnn", 4, "Q", 5, new 
> > Object(), "mock"];
> > > var t:Number = getTimer();
> > > for (var i = 0; i < 100000; ++i) {
> > >   primitiv_array.toString()
> > > }
> > > trace("Tiempo con la primitiva: " + (getTimer() - t) + " ms.");
> > > var objet_array:Array = new Array("mnnn", 4, "Q", 5, new Object(),
> > > "mock");
> > > t = getTimer();
> > > for (var i = 0; i < 100000; ++i) {
> > >   objet_array.toString()
> > > }
> > > trace("Tiempo con el objeto: " + (getTimer() - t) + " ms.");
> > > </code>
> > > 
> > > -----Mensaje original-----
> > > De: [EMAIL PROTECTED] 
> > [mailto:[EMAIL PROTECTED] En
> > > nombre de Joseba Alonso
> > > Enviado el: martes, 12 de julio de 2005 13:07
> > > Para: asnativos@5dms.com
> > > Asunto: RE: [ASNativos] Una tontería
> > > 
> > > Es un poco de lo mismo de antes, el operador typeof 
> devuelve el tipo
> > > primitivo del *valor* que contiene la variable. El problema 
> > es que en
> > > realidad para Flash una clase *no* es un tipo. Recuerda que 
> > aunque con
> > > el
> > > AS2 nos parezca lo contrario, Flash sigue siendo un 
> > lenguaje basado en
> > > prototypes, no un lenguaje "real" OOP basado en clases. 
> > > Cualquier valor
> > > con
> > > una clase asociada nos devolvera "object" como tipo primitivo:
> > > 
> > > <script>
> > > var mistring = "hola";
> > > trace(typeof mistring); // "string"
> > > 
> > > var mistring2 = new String("hola");
> > > trace(typeof mistring2); // "object"
> > > 
> > > var mifuncion = function(){};
> > > trace(typeof mifuncion); // "function";
> > > 
> > > var mifuncion2 = new Function();
> > > trace(typeof mifuncion2); // "object";
> > > 
> > > var miclip = _root.createEmptyMovieClip("clip",1);
> > > trace(typeof miclip); // "movieclip"
> > > 
> > > var miclip2 = new MovieClip();
> > > trace(typeof miclip2); // "object"
> > > 
> > > </script>
> > > 
> > > Para comprobar si un objeto pertenece a una clase se utiliza el
> > > instanceof,
> > > para obtener la clase asociada a un valor se utiliza __proto__.
> > > 
> > > Un ejemplo mas o menos claro:
> > > 
> > > <script>
> > > var s1:String = "hola";
> > > trace(s1 instanceof String); // false
> > > trace(typeof s1); // "string"
> > > </script>
> > > 
> > > Con los literales generamos valores primitivos, y no se 
> > asocia ninguna
> > > clase. Por eso el instanceof nos devuelve 'false' y el type 
> > > es 'string'.
> > > Si
> > > queremos un objeto "real" de la clase String tenemos que hacer:
> > > 
> > > <script>
> > > var s2:String = new String("hola");
> > > trace(s2 instanceof String); // true
> > > trace(typeof s2); // "object"
> > > </script>
> > > 
> > > Lo que ocurre es que para que no nos volvamos locos (más) 
> Flash nos
> > > permite
> > > llamar a metodos y propiedades sobre los valores primitivos 
> > aunque no
> > > pertenezcan a ninguna "Clase" esto lo hace generando el objeto y
> > > aplicando
> > > el metodo/propiedad de manera transparente para nosotros. 
> > > Esto se puede
> > > demostrar con el siguiente script:
> > > 
> > > <script>
> > > var primitiva:String = "un literal";
> > > var t:Number = getTimer();
> > > for(var i:Number = 0;i<100000;i++){
> > >   primitiva.indexOf("l");
> > > }
> > > trace("Tiempo con la primitiva: "+(getTimer()-t)+" ms.");
> > > var objeto:String = new String("un objeto");
> > > 
> > > t = getTimer();
> > > for(var i:Number = 0;i<100000;i++){
> > >   objeto.indexOf("l");
> > > }
> > > trace("Tiempo con el objeto: "+(getTimer()-t)+" ms.");
> > > </script>
> > > 
> > > Si lo ejecutas te dáras cuenta que con la primitiva tarda 
> > el triple de
> > > tiempo el llamar a los metodos, es el tiempo que tarda en 
> generar el
> > > objeto
> > > por detrás y aplicar el metodo, mientras que con el objeto ya 
> > > creado el
> > > llamar al metodo es mas rapido porque ya esta generado.
> > > 
> > > Pfff, vaya chapa xDD, a ver si ha quedado claro ;)
> > > 
> > > Un saludo,
> > > 
> > > 
> > > Joseba Alonso
> > > www.5dms.com
> > > www.sidedev.net  
> > > 
> > > 
> > > ----------------------------------
> > > Lista ASNativos:asnativos@5dms.com
> > > http://www.5dms.com/listas
> > > ----------------------------------
> > > ----------------------------------
> > > Lista ASNativos:asnativos@5dms.com
> > > http://www.5dms.com/listas
> > > ----------------------------------
> > 
> > 
> > ----------------------------------
> > Lista ASNativos:asnativos@5dms.com
> > http://www.5dms.com/listas
> > ----------------------------------
> > ----------------------------------
> > Lista ASNativos:asnativos@5dms.com
> > http://www.5dms.com/listas
> > ----------------------------------
> 
> 
> ----------------------------------
> Lista ASNativos:asnativos@5dms.com
> http://www.5dms.com/listas
> ----------------------------------
> ----------------------------------
> Lista ASNativos:asnativos@5dms.com
> http://www.5dms.com/listas
> ----------------------------------


----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------
----------------------------------
Lista ASNativos:asnativos@5dms.com
http://www.5dms.com/listas
----------------------------------

Responder a