No eres el primero ni el ultimo (incluida mi persona) al que le ocurre
esto...  es un error muy común producido por las ansias de empezar a
trabajar con NHibernate sin haberse leído la documentación antes.
Sigue programando, que el desarrollo de software es de los pocos sectores
que se está librando de la crisis. La cría de gallinas está más afectado.
:-D

El 23 de enero de 2009 10:49, Plugin <[email protected]> escribió:

>
> 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
> >
> >
> >
>


-- 

=================================
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