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