Estamos usando NHibernate para administrar nuestra persistencia en una aplicación compleja de formularios modulares de Windows, pero un pensamiento me sigue molestando. Actualmente, abrimos una sesión en el lanzamiento y abrimos todos los objetos a través de esa sesión. Me preocupa que todos los objetos cargados se carguen en la memoria caché de la sesión NHibernate, por lo que no pueden ser recogidos basura, y finalmente terminaremos con toda la base de datos en la memoria.¿Cómo administrar las sesiones de NHibernate en una aplicación de formularios de Windows de larga vida?
Esto nunca ocurre con las aplicaciones web porque las solicitudes de páginas web (y aún mejores solicitudes de Ajax) representan la transacción de corta duración perfecta por lo que se puede abrir y cerrar una sesión para manejar cada solicitud.
Sin embargo, si cargo un árbol de objetos en mi aplicación de formularios y los coloco en un panel de navegación en la pantalla, pueden permanecer así durante toda la vida útil de la aplicación, y en cualquier momento el usuario puede hacer clic en ellos. nuestro código necesita navegar las relaciones de objeto a otros objetos (que solo funciona dentro de una sesión de NHibernate).
¿Qué hacen los lectores de StackOverflow para mantener los beneficios de NHibernate sin los problemas que describo?
Aquí hay un artículo con una buena muestra de cómo implementar la sesión por conversación en una aplicación de escritorio: http://msdn.microsoft.com/en-us/magazine/ee819139.aspx –