Hola Diego

rapidito, estoy medio tapado....

Thread.Sleep (Método)
Bloquea el subproceso actual durante el número de milisegundos especificado.

 Thread.Sleep (Int32)

Pegale una miradita a:

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

Si no te alcanza decime y tratao de armar un ejemplito.  :))

Daniel

El día 11/10/07, JATEMLIANSKY, Diego <[EMAIL PROTECTED]> escribió:
>
>  Antes que nada gracias por el debate, me esta aclarando un poco mas sobre
> el GC.
> Particularmente yo trato de no ejecutar el GC.Collect porque había leído
> que no era recomendable.
>
> Con respecto al uso del procesador que opinan ?
> Hay alguna manera de decir que cierto proceso puede usar hasta un máximo
> del procesador o que tiene menor prioridad a otros procesos (Para que no
> afecte la performance del servidor) ?
>
> Daniel, mencionaste algo de dormir el proceso.
> Podes explicarme un poco en que consiste ?
>
>
>
> -----Mensaje original-----
> *De:* Damián Herrera [mailto:[EMAIL PROTECTED]
> *Enviado el:* Jueves, 11 de Octubre de 2007 14:11
> *Para:* [email protected]
> *Asunto:* [puntonet] Preguntas varias
>
> Hola Pablo,
>
> Según lo que yo lei el tema de las generaciones se aplica a partir de la
> cantidad de veces que el GC evaluó si eliminaba el objeto o no (fuera de
> scope o referencia nula). No tiene que ver en este sentido con el tamaño del
> objeto en memoria.
>
> Hasta donde se, la política que aplica GC es "cuanto más antiguo es el
> objeto más probable es que permanezca en memoria" por eso asigna
> generaciones. Entonces siempre el primer paso del GC es hacer el árbol de
> recolección de objetos y marcar a quienes va a liberar, liberar los que ya
> están marcados para liberar e incrementar las generaciones de los gen0. Si
> requiere liberar más memoria recorre el árbol de gen1, y si requiere más el
> gen2.
>
> Después hay un segundo proceso que es la compactación de memoria que evita
> la fragmentación.
>
> Espero haber ayudado :s
>
> Saludos,
> Damián Herrera
>
>  ------------------------------
> *From:* [email protected] [mailto:[EMAIL PROTECTED] *On Behalf Of *Pablo
> A. Allois
> *Sent:* Thursday, October 11, 2007 1:26 PM
> *To:* [email protected]
> *Subject:* [puntonet] Preguntas varias
>
>  Sobre el GC.en FX1.1, si mi memoria no me falla es algo asi:
>
> Gen0: objetos que ocupan poco espacio creados mas recientemente
>          Politica: limpiar seguido los objetos. Consume pocos recursos.
>
> Gen1: objetos de la Gen0 que intento limpiar una vez y estaban
> referenciados
>           Politica: no limpia tan seguido como la gen0. . Consume pocos
> recursos.
>
>  Gen3: objetos que ocupan mas espacio en memoria
>           Politica: los limpia cuando lo cree indispensable ... por
> ejemplo cuando necesita memoria
>                        Consume muchos recursos.
>
>  Algo mas, hay que investigar si no hay lagunas de memorias ... se que hay
> una combinacion de contadores de performance que te permite averiguarlo.
>
>  Un buen punto tambien, para comenzar a investigar el consumo de memoria,
> es levantar los contadores de performance del Garbage Collector ...
> inclusive te perite monitorear el GC por generacion.
>
>
>
> Saludos!
>  ------------------------------
> *De:* [email protected] [mailto:[EMAIL PROTECTED] *En nombre de *Daniel
> Calvin
> *Enviado el:* Jueves, 11 de Octubre de 2007 12:13 p.m.
> *Para:* [email protected]
> *Asunto:* [puntonet] Preguntas varias
>
> Hola Pablo
>
> vamos a darle un contexto a lo que dije:
>
>
> >>>Dim myDS=zzz.Traer () as DataSet
>
>
> myDS es una referencia al data set retornado por la funcion, la
> erewspuesta que di es por la duda de como se des referencia la variable
> interna de la función.
>
> Lo que trate de graficar es que esa referencia solo queda asociada a la
> variable receptora. Si myDS sale de ambito y coando lo sabe el que esta
> programando.
> Lo mjio fue para graficar donde limpiarias la referencia si necesitas
> hacerlo.
>
> >>>>
> - Sobre " GC no recolecta objetos costosos, mantiene las referencias de
> esos objetos por mas tiempo"
> Los limpia, pero cuando quiere o lo necesita.
>
> El GC mantiene dos tablas de referencias, por decirlo e alguna manera,
> para liberar determinados objetos hace alguna evaluacion de costo, si esa
> evaluacion da como rsulatdo un alto costo GC no recolecta, pasa ese objeto a
> la segunda lista de referencias. Solo lo liberará ante una necesidad
> importante de recursos. Esto es asi en Net 2.0, no es el comportamiento de
> Net 1.1 y anteriores. Tengo un paper en algun lugar, lo busco y lo mando a
> la lista. Pero es asi, el GC no siempre te libera todo.
>
> Saludos
>
> Daniel Calvin
>
>
> El día 11/10/07, Pablo A. Allois <[EMAIL PROTECTED] > escribió:
> >
> >  Ante todo disculpa Daniel ... pero no coincido del todo.
> >
> > - Sobre ds = nothing
> > El GC marca los objetos para limpiarlos en la medida que no tengan
> > referencias, por lo tanto haceralgo = nothing, la mayoria de las veces es
> > innecesario.
> > Si tengo una variable dentro de un metodo, apuntando al dataset ...
> > cuando salgo del scope del metodo no me quedan referencias apuntando al
> > dataset y esta listo para el GC; en todo caso, seria util, si el dataset
> > esta apuntado desde alguna referencia static/shared.
> > Personalmente, mas alla de que pueda ayudar el ds = nothing, no creo que
> > la ayuda al GC justifique esa linea de codigo.
> >
> > - Sobre Dispose
> > Coincido
> >
> > - Sobre Dataset.Dispose
> > Si, al dataset no lo usas desde el diseniador, y no te colgas de los
> > eventos ... ejecutarlo hoy ... al menos con el FX1.1 no te brinda nada.
> > Si lo decompilas, se ve que el Dispose esta escrito en la clase
> > MarshallByValueObject ... y lo unico que hace, es limpieza de handlers y
> > objetos del diseniador.
> >
> > - Sobre "GC no recolecta objetos costosos, mantiene las referencias de
> > esos objetos por mas tiempo"
> > Los limpia, pero cuando quiere o lo necesita.
> >
> >
> >
>
>
>
>
>
>
>
>
>
>  Saludos!
> >
> >  *De:* [email protected] [mailto:[EMAIL PROTECTED] *En nombre de *Daniel
> > Calvin
> > *Enviado el:* Jueves, 11 de Octubre de 2007 10:59 a.m.
> > *Para:* [email protected]
> > *Asunto:* [puntonet] Preguntas varias
> >
> > 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
> >
>
>
>
> --
> Daniel A. Calvin
> Cooperator Team Member
> http://www.cooperator.com.ar
> Microsoft Certified Professional
>
>  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