2011-02-09 64 views
0

我試圖找出我的應用程序中的很多內存在哪裏,並在做一些分析時我注意到由NHibernate加載的任何數據對象掛一旦請求(是asp.net),因此會話結束。追溯它,似乎有很多事情正在做,比如「SingleTableEntityPersister」和「StatefulPersistenceContext」。我現在禁用了二級緩存,但它們仍然保留在NHibernate堅持對數據對象的引用

任何想法?

會話被正確配置:

 if (session != null) 
     { 
      if (session.Transaction != null && session.Transaction.IsActive) 
      { 
       session.Transaction.Rollback(); 
      } 
      else 
      { 
       session.Flush(); 
      } 

      session.Close(); 
      session.Dispose(); 
     } 
+0

請求完成後,您如何清理會話? – AlexCuse

+0

已編輯問題 – Paul

+1

@Paul和誰保持會話活着? –

回答

1

NHibernate的跟蹤對對象所做的所有更改,這意味着,如果你這樣做:

user.FirstName = "name" 

它會做出相應的更新中D B。

但跟蹤此NH需要引用所有對象。要獲取未跟蹤的實體,您可以使用IStatelessSession或使用Evict方法從會話中刪除對象。

當會話被處置時,它釋放所有被跟蹤的實體。因此請檢查會話是否被正確刪除,並且交易已關閉

+0

我編輯了問題以顯示會話結束 - 正在關閉並處理。 – Paul