Comunidad de diseño web y desarrollo en internet online

¿Borrar o no borrar listeners?

Citar            
MensajeEscrito el 06 Dic 2011 05:45 pm
¡Hola!

Tengo un dilema. En AS3 muchas cosas llevan listeners, botones, timers, etc. Mis aplicaciones generalmente son ejecutables y por cuestiones de rendimiento y memoria (estas pasan casi todo el día abiertas) me pregunto si es bueno o no preocuparse tanto por borrar listeners déspues de utilizarlos.

Seguramente si han trabajado con cientos de ellos despues de un buen tiempo se habrán dado cuenta que a veces es dificil recordar donde quedó alguno perdido.

Hace un tiempo que mis listeners los declaro y borro con los siguiente parámetros:

Código ActionScript :

//colocando listener: 
btn_boton.addEventListener(MouseEvent.MOUSE_DOWN, funcion_boton, false, 0, true);

//removiendo listener: 
btn_boton.removeEventListener(MouseEvent.MOUSE_DOWN, funcion_boton);


Hasta donde recuerdo el último parámetro en el addEventListener es el que más ayuda a ello, para que el garbaggeCollector se lo lleve siempre que pueda..

En fin, la pregunta concretamente es: ¿Me preocupo o no por borrar mis listeners?

Por driegon

36 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Dic 2011 10:25 pm
Si no los borras, nunca liberas esa memoria

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2011 10:43 pm

solisarg escribió:

Si no los borras, nunca liberas esa memoria

Jorge


¿Aunque ese trabajo sea del garbagge collector? ¿Aún cuando active el parámetro que comentaba en el addEventListener?

Por driegon

36 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 06 Dic 2011 10:48 pm
Aunque uses weak reference, si no lo borras explícitamente con removeEventListener, el player mantendrá en memoria todos los elementos que tengan listeners attachados. Creo que hay un artículo sobre garbage collector aquí mismo en Cristalab

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Dic 2011 10:58 pm
Una pregunta más, en tu experiencia, ¿hay alguna forma de manejar más eficientemente toda esa cuestión de los listeners? O es pura cuestión de orden y organización?

Por driegon

36 de clabLevel



Genero:Masculino  

safari
Citar            
MensajeEscrito el 06 Dic 2011 11:00 pm
Es un tema de estructura: cualquier objeto con listener que tenga vida finita dentro de la aplicación debe implementar un destroy donde todos los listeners (y cualquier otra referencia que prevenga el garbage collection) son borrados. Si utilizas algún framework, usualmente este ciclo es automático y no deberás preocuparte por hacerlo manualmente

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Dic 2011 10:25 am
BuenAS:

Una opción muy buena para optimizar los listeners es, siempre que puedas, optar por utilizar signals:

AS3 Signals

en lugar de los eventos nativos de AS3.

Además de que es más fácil eliminar/añadir listeners, son INDEPENDIENTES de la DisplayList (de la lista de visualización) y una clase no tiene por qué ser hija de otra (en la displayList) para comunicarse con ella.

Un signal tiene un método buenísimo "removeAll()" que elimina todos los listeners sin más. Flash Player 11 "ahora" incorpora algo parecido (a buenas horas mangas verdes ;) ).

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 07 Dic 2011 10:29 am

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 09 Dic 2011 04:49 pm
Muchas gracias Jorge y Lukánicos.

Creo que leeré un poco acerca de lo que me propone Lukánicos :D y les contaré más adelante :P

Por driegon

36 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.