Perdón, me olvidaba

El uso de GC.Collect() es muy acotado, depende del caso y en muchas
ocasiones puede ser más malo que bueno, pero es para investigar. Este
artículo estás muy piola

http://msmvps.com/blogs/pmackay/archive/2007/03/28/liberacion.aspx

Saludos.

On 10/11/07, Leonardo Micheloni <[EMAIL PROTECTED]> wrote:
> 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/
>
>


-- 
Leonardo Micheloni.

http://leomicheloni.blogspot.com/

Responder a