SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => VB .NET => Mensaje iniciado por: Cajami en Lunes 2 de Abril de 2007, 03:13

Título: Borrar De La Memoria Un Objeto
Publicado por: Cajami en Lunes 2 de Abril de 2007, 03:13
Hola amigos, se me vino esta interrogante despues de ver varios ejemplos distintos en como borrar un objeto, y quisiera saber como se borra un objeto de la memoria, io utilizo objeto como SqlConecction, SqlCommand, SqlDataAdpater, DataSet, DataTable y quisiera eliminarlos de la memoria cuando ia no los necesite, io lo hago asi:

Código: Text
  1. Objeto = Nothing
  2.  

Pero veo en ejemplo que lo hacen asi:

Código: Text
  1. Objeto.Dispose
  2.  

Me dicen que para utilizar Dispose hay que crear un metodo, pero io no he creado clases solo utilizo las de .Net Frameword, toy un poco confundido pero como elimiar de la memoria esos objetos???? de antemano muchas gracias nos vemos  :hola:
Título: Re: Borrar De La Memoria Un Objeto
Publicado por: lencho en Lunes 2 de Abril de 2007, 14:17
umm.

Citar
Garbage collector: El CLR proporciona un sistema automático de administración de memoria denominado recolector de basura (garbage collector). El CLR detecta cuándo el programa deja de utilizar la memoria y la libera automáticamente. De esta forma el programador no tiene por que liberar la memoria de forma explícita aunque también sea posible hacerlo manualmente (mediante el método disponse() liberamos el objeto para que el recolector de basura lo elimine de memoria).

BYTE.
Título: Re: Borrar De La Memoria Un Objeto
Publicado por: Cajami en Lunes 2 de Abril de 2007, 15:50
Cita de: "lencho"
umm.

Citar
Garbage collector: El CLR proporciona un sistema automático de administración de memoria denominado recolector de basura (garbage collector). El CLR detecta cuándo el programa deja de utilizar la memoria y la libera automáticamente. De esta forma el programador no tiene por que liberar la memoria de forma explícita aunque también sea posible hacerlo manualmente (mediante el método disponse() liberamos el objeto para que el recolector de basura lo elimine de memoria).

BYTE.
Hola, si el recolector de basura elimina los objeto que ia no utilize el programa pero como leí no se está seguro si se eliminó o no el objeto eso va a depender de la decision que tome el recolector, me dices que con el Dispose se va a eliminar el objeto de la memoria o solo la referencia????
Título: Re: Borrar De La Memoria Un Objeto
Publicado por: JuanK en Lunes 2 de Abril de 2007, 15:51
Cita de: "Cajami"
Hola amigos, se me vino esta interrogante despues de ver varios ejemplos distintos en como borrar un objeto, y quisiera saber como se borra un objeto de la memoria, io utilizo objeto como SqlConecction, SqlCommand, SqlDataAdpater, DataSet, DataTable y quisiera eliminarlos de la memoria cuando ia no los necesite, io lo hago asi:

Código: Text
  1. Objeto = Nothing
  2.  

Pero veo en ejemplo que lo hacen asi:

Código: Text
  1. Objeto.Dispose
  2.  

Me dicen que para utilizar Dispose hay que crear un metodo, pero io no he creado clases solo utilizo las de .Net Frameword, toy un poco confundido pero como elimiar de la memoria esos objetos???? de antemano muchas gracias nos vemos  :hola:
Para usar Dispose debes implementar la interfaz IDIsposable, epro eso solo aplica para objetos que contienen elementos ( o sea mas objetos) pero estos no están en la memoria administrada, es decir Dispose solo se usa para liberar los recursos no administrados.

No hay manera de obligar al garbage colecetor a liberar un objeto cargado en memoria, pero si se puede dejar un objeto como candidato para ser liberado, para ello hay que cumplir solo un requisito fundamental.

Liberar cualquier referencia al objeto, es decir asignar null.

si un objeto tiene al menos una referencia nunca sera liberado.

Aca el objeto puede ser liberado:

TextBox t= new TextBox();
t=null;

Aca el objeto no sera liberado:

TextBox t= new TextBox();
FormaCorreo.CorTextBox = t;
t=null;

pues FormaCorreo.CorTextBox aun tiene una referencia al objeto.

Una vez ya no hay referencias al objeto el GC puede determinar si leberarlo o no de acuerdo a los recursos consumidos actualmtente en memoria, a la memoria disponible, a la intensidad de proceso, a la encesidad de espacio en memoria etc... pero no hay forma de forzarlo, lo mas cercano es llamando a

GC.Collect

pero esto solo hara una revision para ver que memoria liberar pero no lo obliga a liberarla.
Título: Re: Borrar De La Memoria Un Objeto
Publicado por: Cajami en Lunes 2 de Abril de 2007, 16:00
Cita de: "JuanK"
Cita de: "Cajami"
Hola amigos, se me vino esta interrogante despues de ver varios ejemplos distintos en como borrar un objeto, y quisiera saber como se borra un objeto de la memoria, io utilizo objeto como SqlConecction, SqlCommand, SqlDataAdpater, DataSet, DataTable y quisiera eliminarlos de la memoria cuando ia no los necesite, io lo hago asi:

Código: Text
  1. Objeto = Nothing
  2.  

Pero veo en ejemplo que lo hacen asi:

Código: Text
  1. Objeto.Dispose
  2.  

Me dicen que para utilizar Dispose hay que crear un metodo, pero io no he creado clases solo utilizo las de .Net Frameword, toy un poco confundido pero como elimiar de la memoria esos objetos???? de antemano muchas gracias nos vemos  :hola:
Para usar Dispose debes implementar la interfaz IDIsposable, epro eso solo aplica para objetos que contienen elementos ( o sea mas objetos) pero estos no están en la memoria administrada, es decir Dispose solo se usa para liberar los recursos no administrados.

No hay manera de obligar al garbage colecetor a liberar un objeto cargado en memoria, pero si se puede dejar un objeto como candidato para ser liberado, para ello hay que cumplir solo un requisito fundamental.

Liberar cualquier referencia al objeto, es decir asignar null.

si un objeto tiene al menos una referencia nunca sera liberado.

Aca el objeto puede ser liberado:

TextBox t= new TextBox();
t=null;

Aca el objeto no sera liberado:

TextBox t= new TextBox();
FormaCorreo.CorTextBox = t;
t=null;

pues FormaCorreo.CorTextBox aun tiene una referencia al objeto.

Una vez ya no hay referencias al objeto el GC puede determinar si leberarlo o no de acuerdo a los recursos consumidos actualmtente en memoria, a la memoria disponible, a la intensidad de proceso, a la encesidad de espacio en memoria etc... pero no hay forma de forzarlo, lo mas cercano es llamando a

GC.Collect

pero esto solo hara una revision para ver que memoria liberar pero no lo obliga a liberarla.
Hola como dije al principio por ejemplo io utilizo un DataAdapter para filtrar a un DataTable pero despues ia no necesito ese DataAdapter, quieres decir que si le asigno Null se va a eliminar de la memoria?? y no es lo mismo con Nothing?? o estoy mal y si es asi que hace entonce sel Nothing??, gracias  :hola: