Está en la página 1de 2

Destructores

Al igual que es posible definir mtodos constructores que incluyan cdigo que gestione la
creacin de objetos de un tipo de dato, tambin es posible definir un destructor que gestione
cmo se destruyen los objetos de ese tipo de dato. Este mtodo suele ser til para liberar
recursos tales como los ficheros o las conexiones de redes abiertas que el objeto a destruir
estuviese acaparando en el momento en que se fuese a destruir.
La destruccin de un objeto es realizada por el recolector de basura cuando realiza una
recoleccin de basura y detecta que no existen referencias a ese objeto ni en pila, ni en
registros ni desde otros objetos s referenciados. Las recolecciones se inician automticamente
cuando el recolector detecta que queda poca memoria libre o que se va a finalizar la ejecucin
de la aplicacin, aunque tambin puede forzarse llamando al mtodo Collect() de la clase
System.GC
El Garbage Collector es un "servicio" (por llamarlo de alguna forma) que va liberando memoria
conforme va haciendo falta.
Cuando no hace falta un objeto, normalmente se establece igual a null o nothing
(dependiendo del lenguaje de programacin). Al hacer esto, esta marcando el espacio de
memoria que ocupa para que pueda ser liberado por el Garbage Collector. Esta liberacin no
es inmediata, sino que se libera cuando el Garbage Collector lo cree necesario (normalmente
cuando se requiere memoria por otro proceso). Esta forma de trabajar es la que es
recomendable, ya que la liberacin de memoria se suele hacer en segundo plano, y no afecta
al rendimiento de la aplicacin (el Garbage Collector suele funcionar bastante bien, as que no
hay problema).
Otra cosa diferente es que se puede forzar al Garbage Collector a que se ejecute cuando se
quiera, y esto es lo que no suele ser una buena prctica, ya que la liberacin no se hace en
segundo plano, sino en primer plano, con lo que se puede tener problemas de rendimiento en
aplicaciones con un volumen de usuarios / transacciones alto. Como hemos comentado, hay
algunos casos en que puede ser recomendable, pero suelen ser los mnimos.
Respecto a la forma de trabajar, normalmente se recomienda (asignando el valor null al
objeto), y en algn caso muy determinado se puede llegar a invocar manualmente al Garbage
Collector (procesos que deban gestionar un volumen muy alto de datos y clases).
Otra buena prctica es que las clases (sobre todo las que tengan o contengan otros objetos)
implementen la interfaz "IDisposable", y dentro del mtodo "Dispose" haces la asignacin a
null/nothing de los objetos contenidos en su interior.
Por norma general, no es una buena prctica el invocar manualmente al Garbage Collector, ya
que puede causar una penalizacin del rendimiento importante. Invocar al Garbage Collector
para que limpie la memoria implica que este sistema debe realizar un proceso pesado donde
se limpian los objetos no utilizados de la memoria, y en sistemas de produccin con un gran
nmero de transacciones tienes todos los nmeros de tener una bajada de rendimiento
bastante grande.

No obstante, pueden haber casos en los que pueda ser interesante invocar directamente al
Garbage Collector, como por ejemplo despus de ejecutar un proceso pesado que ha
requerido crear una coleccin de objectos en memoria muy grandes, siempre y cuando
aseguremos que no afectar al resto de usuarios. Por ejemplo, si tienes un proceso nocturno
donde se realicen muchos clculos, puede ser interesante realizar una llamada al GC despus
de finalizar, ya que no impactaremos al resto de usuarios
En fin, como conclusin no es una buena prctica invocar al GC normalmente, exceptuando
casos contados.

http://www.elguille.info/NEt/cursocsharperik/Entrega7/Entrega7.htm

También podría gustarte