Ayuda con articulo de garbege collector

25/05/2005 - 17:26 por VKTOP | Informe spam
Hola amigos alguien mepuede explicar esto?
Take out the trash
While the garbage collector is an excellent feature of the .NET Framework,
it often needs help to determine when an object is ready for garbage
collection. You can provide help by calling the Dispose method whenever it
is available on objects as soon as possible. On the same note, you should
not reference objects once they are no longer needed. The reason is the
garbage collector will not process them if they are referenced



Gracias

Saludos

Cesar

Preguntas similare

Leer las respuestas

#1 Tristan
26/05/2005 - 00:37 | Informe spam
Pufff, un tema complicado.

La recolección de basura en .net no es determinista. Una instancia se
destruirá cuando no tenga ninguna referencia: por ejemplo cuando todas las
variables que apunten a ella salgan de ámbito. El problema es que no se
puede saber cuando. Se destruirá cuando el recolector de basura, GC, lo
considere oportuno. hay casos en los que no se puede, o no se debe esperar.
El ejemplo típico es una conexión a una base de datos. No puedes dejar que
las conexiones vayan quedando abiertas mientras el recolector de basura no
decida eliminarlas. Por eso existe un método Dispose(), o en el caso de
conexiones, su sinónimo Close(), que obliga a una destrucción inmediata. Es
decir, Dispose o Close, es una forma de ayudar al recolector de basura para
que la destrucción se haga en ese instante, y no cuando el GC lo determine.

Los objetos que necesitan una liberación determinista, siguen una interfaz,
IDisposable, que incluye un método Dispose() para su liberación inmediata.

Como norma, todo objeto IDisposable que no sea liberado por otro objeto,
debe ser liberado llamando a Dispose(). Por ejemplo los controles de un
formulario no lo necesitan, por que el propio form llama al dispose de cada
uno de sus controles, cuando es liberado.


Espero haberte ayudado un poco con la explicación. Es un tema que tiene su
miga.


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#2 Bruce Wood
26/05/2005 - 01:14 | Informe spam
Pues, español no es mi idioma pincipal, pero...

Esta diciendo dos cosas:

1. Hay classes entre el .NET Framework que tienen un metodo "Dispose".
Un ejemplo es la clase "Image". Cuando termines de usar un objeto de
ese tipo, es necesario invocar su metodo Dispose, y no usar mas ese
objeto:

Image imagen = new Image();
... hacer algo con "imagen" ...
imagen.Dispose();
imagen = null; // Para no usarlo mas despues del "Dispose".

Para las clases que tu creas, tienes que implementar (?) el interface
IDisposeable si tu clase tiene un miembro que tiene el metodo
Dispose(), o que tiene unos miembros que vinieron del viejo Win32
API... un "handle" por ejemplo.

2. Cuando termines de usar un objeto, es importante estar seguro que no
quedan referencias al objeto. Normalmente no hay problema, pero puede
existir un problema si tu programa tiene eventos "static":

public static event System.EventHandler EventoGlobal;

...

public class MiClase
{
public MiClase()
{
OtraClase.EventoGlobal += new
System.EventHandler(OtraClase_EventoGlobal);
}
}

Que pasa aqui es que despues que termines de usar un objeto de tipo
"MiClase", y crees que va estar colectado, no va estar... porque el
evento "EventoGlobal", que nunca muere porque es "static", tiene una
referencia a tu objeto. Tienies que hacer este:

public class MiClase : IDisposeable
{
private bool _dispuesto;

public MiClase()
{
this._dispuesto = false;
OtraClase.EventoGlobal += new
System.EventHandler(OtraClase_EventoGlobal);
}

public void Dispose()
{
Dispose(true);
}

private void Dispose(bool disponiendo)
{
if (!this._dispuesto)
{
if (disponiendo)
{
OtraClase.EventoGlobal -= new
System.EventHandler(OtraClase_EventoGlobal);
}
}
this._dispuesto = true;
}
}

y llamar el "Dispose()" cuando quieres terminar con cada objeto de esa
clase.

Que perdonen mi "Spanglish", por favor. :)
Respuesta Responder a este mensaje
#3 VKTOP
01/06/2005 - 00:16 | Informe spam
Muchas gracias amigos, me uqedo bastante claro.
saludos
Cesar

"VKTOP" escribió en el mensaje
news:
Hola amigos alguien mepuede explicar esto?
Take out the trash
While the garbage collector is an excellent feature of the .NET Framework,
it often needs help to determine when an object is ready for garbage
collection. You can provide help by calling the Dispose method whenever it
is available on objects as soon as possible. On the same note, you should
not reference objects once they are no longer needed. The reason is the
garbage collector will not process them if they are referenced



Gracias

Saludos

Cesar


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida