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