Bueno... pueees.....

Confirmado.

Voy a dedicarme a la cría de gallinas, que esto no es lo mío.

Muchas gracias a todos.



On 23 ene, 10:45, Plugin <[email protected]> wrote:
> Que grande Kash.
>
> Voy a ponerme las orejas de burro y a darme cabezazos contra la
> pared....
>
> (no obstante voy a confirmarlo antes...  ;-)
>
> On 23 ene, 10:42, Kash <[email protected]> wrote:
>
> > Como suponía, aquí está tu problema:
> >  using (ISession sesion = cfg.BuildSessionFactory
> > ().OpenSession())
>
> > Estás creando un SessionFactory cada vez que usas una session y eso es
> > incorrecto. Sólo debes crear una SessionFactory para toda la aplicación, por
> > que es un objeto de alto coste en recursos (como estás pudiendo comprobar),
> > el objeto session es el objeto que se debe solicitar al único SessionFactory
> > de la aplicación por cada unit of work.
>
> > El 23 de enero de 2009 10:39, Plugin <[email protected]> escribió:
>
> > > Muchas gracias por las prontas respuestas.
> > > Conozco el hecho de que el GC no actúa cuando se hace el Dispose, pero
> > > para "forzar la situación"
> > > he hecho GC.Collect , ya un poco a la desesperada.
> > > Y aun así, el uso de la memoria, aumenta con una nueva sesión y no se
> > > recupera.
> > > Para identificar el problema he pasado por alto los asuntos
> > > arquitectónicos, y he creado un test que hace:
>
> > >  NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration
> > > ();
> > >  cfg.Configure();
>
> > >  for (int i = 0; i < 10; i++)
> > >  {
> > >             using (ISession sesion = cfg.BuildSessionFactory
> > > ().OpenSession())
> > >                {
> > >                    Sector sector = (Sector)sesion.Load(typeof
> > > (SectorImpl), (Int16)10);
> > >                }
>
> > >            }
>
> > > GC.Collect();
>
> > > Lo he ejecutado cada 2 minutos (para simular un entorno de producción
> > > real, como me aconsejaba Gustavo, que por cierto,muy bueno símiles)
>
> > > De nuevo, gracias.
>
> > > On 23 ene, 10:03, Gustavo Ringel <[email protected]> wrote:
> > > > Francisco por supuesto que tenes razon en un punto de vista teorico, 
> > > > pero
> > > en
> > > > la practica el GC de C# solo recolecta memoria cuando hace allocation.
>
> > > > Ver por ejemplo esto:
> > >http://blogs.msdn.com/tess/archive/2007/04/10/net-garbage-collector-p...
>
> > > > *If we exclude GC.Collect calls, this means that a GC will only occur on
> > > > allocation.  I have mentioned this before, but I think it is worth
> > > > mentioning again... a classic mistake to make is to run a stress test 
> > > > and
> > > > then come back 10 mins after the stress test and wonder why memory is 
> > > > not
> > > > being released.  In other words, objects may well be ready to be 
> > > > released
> > > > but no allocations are made, meaning no GCs will occur, so memory usage
> > > will
> > > > stay flat.
> > > > *
> > > > Gustavo.
>
> > > > 2009/1/23 Francisco A. Lozano <[email protected]>
>
> > > > > Si el GC no elimina esos objetos de la memoria es porque mantienes
> > > > > referencias a los mismos, simple y llanamente, por mucho dispose que
> > > > > hagas.
>
> > > > > Francisco A. Lozano
>
> > > > > 2009/1/23 Plugin <[email protected]>:
>
> > > > > > Saludos a todos.
>
> > > > > > En primer lugar debo agradeceros vuestra dedicación y consejo, que 
> > > > > > en
> > > > > > más de una situación delicada me han salvado.
>
> > > > > > La cuestión que quiero plantear es la siguiente:
> > > > > > Hemos puesto en marcha una aplicación ASP.Net que emplea NHibernate.
>
> > > > > > Para la gestión de las sesiones, hemos usado el "Command Pattern", 
> > > > > > de
> > > > > > forma que cada caso de uso
> > > > > > se enmarca en una apertura/cierre de sesión. (de forma similar a 
> > > > > > como
> > > > > > se hace en el Session per view )
>
> > > > > > Ahora bien. Lo que hemos observado es que al hacer un Close o un
> > > > > > Dispose de la sesión, el GC hace caso omiso, y la memoria no se está
> > > > > > recuperando, de modo que tras hacer uso varios usuarios de la
> > > > > > aplicación, se produce una OutOfMemoryException...
>
> > > > > > He probado a hacer un test de stress haciendo 
> > > > > > apertura/cierre/dispose
> > > > > > de sesiones, recuperando un objeto, y he comprobado que
> > > efectivamente,
> > > > > > el uso de memoria crece, crece....
>
> > > > > > Dónde puede estar el problema?
> > > > > > Hay algo que no entendí bien?
>
> > > > > > Un saludo.
>
> > --
>
> > =================================
> > Sergio Castillo Checa
>
>
--~--~---------~--~----~------------~-------~--~----~
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
-~----------~----~----~----~------~----~------~--~---

Responder a