"   3- Creo que la version Datacenter de Server te permite limitar el uso de 
cpu para procesos"

Solamente DataCenter provee herramientas para administrar esto pero existe una 
API nativa de Windows, disponible también en las versiones "normales", que 
controla lo que se denomina "Job Objects", y permite gestionar un proceso, o 
grupo de procesos, como una unidad con el propósito de administrar y poner 
restricciones al uso que hacen de ciertos recursos, como el procesador o la 
memoria. 

Saludos,

Fernando Tubio
  ----- Original Message ----- 
  From: Pablo A. Allois 
  To: [email protected] 
  Sent: Thursday, October 11, 2007 3:02 PM
  Subject: [puntonet] Preguntas varias


  Diego,

          Sobre limitar el uso de cpu se me ocurre:

              1- Virtualiza en un servidor el servicio y al virtual limitale el 
uso de cpu
              2- Creo, que hay un producto Resource manager que te permitia 
hacer eso
              3- Creo que la version Datacenter de Server te permite limitar el 
uso de cpu para procesos

          La unica opcion que se que te va a servir con certeza es virtualizar 
... pero entiendo que implica muchas otras cosas, y a veces no se justifica 
virtualziar por un solo servicio.


  Saludos!





------------------------------------------------------------------------------
  De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de JATEMLIANSKY, 
Diego
  Enviado el: Jueves, 11 de Octubre de 2007 02:52 p.m.
  Para: [email protected]
  Asunto: [puntonet] Preguntas varias


  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.


Responder a