a) this isn't the place for those sort of questions b) you keep creating session *factories*, not sessions
On Thu, Feb 17, 2011 at 2:40 PM, Ryan <[email protected]> wrote: > I have an application that is growing in memory size with every hit to > our NHibernate repository object and not ever releasing that memory. > This has become very noticable since we've added database polling to > the application.. very simple query bringing back very little data but > growing the memory footprint with each hit. Please explain to me what > is wrong with this pattern? > > //pseudocode > Class NHibernateRepository > > Private _factory as ISessionFactory > > // Constructor injection handled with Windsor > Public Sub New NHibernateRepository(ISessionFactory factory) > _factory = factory > End Sub > > Public Sub List(Of TEntity)(dc as DetachedCriteria) > Using session as ISession = _factory.BuildSessionFactory() > Return session.List(dc) > End Using > End Sub > > So my first thought is that the session object is not being released. > So I moved the return outside of the using block (assigning the > results to a local IList and returning that). No improvements. > > Next thought is that maybe I shouldn't be disposing of the session > with every call.. if I want to do lazy loading an active session is > needed after all. So I added a private Session property that only > builds the from the session factory if one does not already exist. > > Private _session as ISession > > Private Readonly Property Session() > If _session Is Nothing Then > _session = _factory.BuildSessionFactory() > End If > Return _session > End Property > > This appears to solve the problem with the growing memory. However I > am getting other errors that a datareader has already been opened for > an operation and needs to be closed before being reused. Maybe I need > to work through these errors. I'm just wondering if I'm heading in > the right direction. > > Thanks! >
