sobre la destrucción de formularios

09/12/2005 - 10:27 por luis | Informe spam
La teoría dice que un objeto se destruye cuando ya no hay más referencias al
mismo. Pero si yo en un método escribo esto:

Form2 x=new Form2();
x.Show();

Al acabar el método x deja de existir como variable local que es pero el
formulario sigue vivito y coleando. Entonces ¿cuál es la referencia a ese
formulario que lo mantiene "vivo"?

Entonces ¿cuando se destruye el formulario (me refiero a que esté disponible
para el recolector)? ¿Cuando no tengamos ninguna referencia y lo cerremos?
¿Se puede forzar su destrucción real (liberación de la memoria que ocupa)?
 

Leer las respuestas

#1 A.Poblacion
09/12/2005 - 10:37 | Informe spam
"luis" wrote in message
news:%23AFkiLK$
La teoría dice que un objeto se destruye cuando ya no hay más referencias


al
mismo. Pero si yo en un método escribo esto:

Form2 x=new Form2();
x.Show();

Al acabar el método x deja de existir como variable local que es pero el
formulario sigue vivito y coleando. Entonces ¿cuál es la referencia a ese
formulario que lo mantiene "vivo"?



La referencia la mantiene el Framework. Cuando creas un formulario de
System.Windows.Forms, las librerías de clases del Framework gestionan
internamente la bomba de mensajes de Windows, y van pasando los mensajes que
correspondan al formulario para que los procese. Eso implica que por dentro
necesita mantener una referencia al formulario, la cual lo mantiene "vivo".

Entonces ¿cuando se destruye el formulario (me refiero a que esté


disponible
para el recolector)? ¿Cuando no tengamos ninguna referencia y lo cerremos?
¿Se puede forzar su destrucción real (liberación de la memoria que ocupa)?



Si quieres forzar la destrucción, llama a x.Dispose(); Esto libera todos
los recursos consumidos por el formulario, y queda disponible para que lo
libere el Garbage Collector en cuanto destruyas la variable x. Puedes forzar
una pasada del Garbage Collector con la orden GC.Collect(), aunque Microsoft
recomienda que se utilice únicamente en tiempo de desarrollo para hacer las
pruebas de liberación de memoria, pero que en producción no se fuerce nunca
el Collect y se deje al sistema que lo lance internamente cuando lo
requiera.

Preguntas similares