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/
