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