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/
