Lo cierto es que no podemos predecir en qué momento va a pasar a nuestra puerta a recoger la basura. Así mismo el Recolector no podrá realizar su trabajo adecuadamente si le ponemos una cadena y un candado a nuestro bote de basura, no creen?
Esto ocurre cuando nuestras aplicaciones emplean una estructura de clases compleja y los recursos que se están liberando no pueden ser o no deberían ser removidos aun, en vista que podrían estar realizando alguna actividad que se atraso.
La recomendación que nos hace Microsoft es que usemos el patrón Try Catch para poder atender situaciones de este tipo, en aquellas clases que pudieran encontrarse en ese escenario.
En un articulo que publique en febrero de este año presente un ejemplo donde definía una interface que empleaba un método que no desarrolle en dicho articulo, Lau me solicito un ejemplo desde Abril y debido ala carga de trabajo no había podido atender su solicitud, así que hoy pondremos un ejemplo que es el complemento de dicho articulo .
Ejemplo:
En ese ejemplo se presenta el patrón de repositorio, si observan con detenimiento tanto en la definición de la interface como en la clase que lo implementa podemos identificar una interface que se relacionan con el tema: IDisposable.En el último párrafo de código aparece la región donde se implementa esta interface, pero aparece contraída, así que a continuación la voy a presentar para que puedan ver la forma en que se implementa:
En este primer párrafo vemos un destructor mismo que llama al método Dispose usando como parámetro un valor false, esta es la forma que pertenece al patrón recomendado por Microsoft para que se emplee en este tipo de situaciones:
En este segundo párrafo podemos ver que se llama un método Dispose que recibe un parámetro true y justamente después se llama al Garbage Collector pasándole como parámetro el objeto que lo está llamando.
En este último método que es llamado por los dos métodos anteriores, con diferente parámetro, podemos observar que cuando el destructor llama al Dispose, este no destruye la referencia que se creó al principio de nuestro ejemplo; sin embargo cuando es llamado al momento de tratar de disponer de el nuestro Garbage Collector, entonces si podemos ver la forma como se libera un recurso que por su naturaleza podría no haber sido liberado aun, y que se declaro al principio de esta clase, creando una relación con esta.
Espero que este ejemplo sirva para concluir la idea que en el artículo anterior quedo a medias.
Suerte.
No hay comentarios:
Publicar un comentario