No necesariamente tambien puede ser unmnanaged objects que no se suprimen de manera adecuada (connections a la database, etc) Pero igual mi intencion no fue discutir contra lo que vos decias, sino aclarar que la prueba de abrir objetos y hacerles dispose y esperar que la memoria se libere de inmediato es un error conceptual.
Gustavo. 2009/1/23 Francisco A. Lozano <[email protected]> > > No lo sabía, pero creo que ese hecho no es importante. El que haya una > OutOfMemoryException indica que hay objetos que no han sido marcados > para liberación (ya sea ésta al eliminar la referencia o al reclamarla > el runtime para otras allocations). Por tanto, estos objetos siguen > estando referenciados. > > Francisco A. Lozano > > > > 2009/1/23 Gustavo Ringel <[email protected]>: > > 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-popquiz-followup.aspx > > > > 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. > >> > > > >> > > >> > >> > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano -~----------~----~----~----~------~----~------~--~---
