Para agregar algo a la excelente explicación de Daniel, podés forzar
el garbage collector a hacer su trabajo con

GC.Collect()

http://msdn2.microsoft.com/es-es/library/system.gc.collect(VS.80).aspx

Saludos.

On 10/11/07, Daniel Calvin <[EMAIL PROTECTED]> wrote:
> Hola Diego
>
> 1 - Hacer dispose es una cosa hacer algo = nothing es otra.
>
> Cuando las clase implementan IDisposable es porque tienen capturados
> recursos que se deberian liberar.
> el invocar el dispose() hace eso, el que programo la clase en ese metodo
> libera todos los recursos capturados.
>
> El tema del nothing pasa por otro lado. Tiene que ver con mantener
> referencias no utilizadas a objetos.
> Se recomienda hacer xx = nothing para que el GC pueda recolectar el objeto.
>
> En cuanto a como actua el GC tiene algunas particularidades. GC no recolecta
> objetos costosos, mantiene las referencias de esos objetos por mas tiempo.
> La recoleccion de objetos no es predecible, solo sabemos que no debe haber
> referencias a un objeto para que si el GC en base a sus politicas de
> recoleccion necesita liberar la memoria lo haga.
>
> Si una clase implementa IDisposable eso no significa que el GC la libere con
> mayor celeridad.
>
> En el caso que planteas:
>         Function traer() as dataset
>         Dim ds as new dataset
>
>         ds = CargarDatasetdesdeSQL
>
>         return ds
>         end function
> Tu funcion retorna una referencia a ds, el nothing lo haras en el consumidor
> de Traer() luego de haber terminado de usar el dataset, algo asi:
>
> Dim myDS=zzz.Traer () as DataSet
> ( o algo parecido, programo en vb   :(   )
>
> luego tu proceso:
>     ....
>     ....
>     ....
>
> Luego:
>     myDS=nothing
>
> 2 - La solución puede ser lanzar el proceso en un nuevo thread, y dormir el
> mismo un tiempo x dentro de la iteración.
>
> Saludos
>
> Daniel Calvin
>
>
>
>
>
> El día 11/10/07, JATEMLIANSKY, Diego <[EMAIL PROTECTED] > escribió:
> > Gente como andan ?
> > Tengo un par de preguntas para hacerles que nos están sacando el sueño y
> que
> > tal vez con algunos tips que nos puedan dar nos puedan orientar un poco
> como
> > encararlo.
> >
> > La arquitectura que tenemos es de FrontEnd en ASP.NET, BackEnd en
> Servicios
> > de Windows VB.NET accedidos por Remoting y SQL Server.
> > (Todo esto instalado en servidores, no instalamos nada en las PC clientes)
> >
> > Ahora les paso las preguntas (Todas con respecto a la parte del BackEnd en
> > donde tenemos todas las reglas de negocios y el grueso de la
> codificacion):
> >
> > 1- Liberar memoria:
> >         En algunos casos nos esta costando entender como hacer para
> liberar
> > memoria.
> >         Por un lado encontramos que nos recomiendan hacer los Dispose de
> los
> > DataSets una vez utilizados y por otro lado también encontramos algunos
> > sites que recomiendan hacer un ds = nothing para liberar la memoria, cual
> es
> > la opción mas recomendable?
> >
> >         Por otro lado, que pasa si un método de nuestro BackEnd hace
> > solamente lo siguiente:
> >
> >         Function traer() as dataset
> >         Dim ds as new dataset
> >
> >         ds = CargarDatasetdesdeSQL
> >
> >         return ds
> >         end function
> >
> >         Como hacemos para liberar la memoria utilizada por este DataSet
> (que
> > en algunos casos trae muchos datos para mostrar en pantalla) si después
> del
> > return no podemos hacer mas nada.
> >
> > 2- Prioridad de procesos:
> >         Tenemos varios procesos que son del tipo Batch, o sea, que el
> > usuario levanta un archivo y lo vamos procesando.
> >         Estos procesos pueden llevar al procesador a consumir mas de lo
> que
> > queremos y afectan al funcionamiento optimo del Server. (Ya que en el
> Server
> > de BackEnd tenemos varios servicios corriendo y no podemos afectar a los
> > otros)
> >         Como hacemos para establecer prioridades a estos procesos o
> decirle
> > que solamente consuman hasta por Ej. un 30% o que tengan menor prioridad ?
> >         O para que el Loop que hacemos con los registros del archivo no se
> > lleve todo el procesador.
> >         (Estos procesos los tenemos que hacer OnLine, no podemos dejarlos
> > como procesos nocturnos)
> >
> >
> > Muchas Gracias.
> >
> >
> >
> > AVISO: El presente mensaje y los archivos adjuntos que incluya pueden
> > contener información confidencial de uso exclusivo del destinatario
> > indicado. Cualquier uso en desacuerdo con su propósito, difusión o
> > publicación, total o parcial, se encuentra prohibida. Si recibió este
> > mensaje por error, rogamos reenviarlo al emisor y destruir las copias
> > impresas o grabadas en su sistema. Las opiniones contenidas, son
> > exclusivas de su autor y no representan necesariamente la opinión de
> > OMINT S.A. de Servicios.
> >
> >
> >
>
>
>
>  --
> Daniel A. Calvin
> Cooperator Team Member
> http://www.cooperator.com.ar
> Microsoft Certified Professional


-- 
Leonardo Micheloni.

http://leomicheloni.blogspot.com/

Responder a