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

Responder a