2014-12-03 61 views
2

我知道在2008年發佈的查詢緩存中存在以前的Nhibernate問題。我使用Fluent NHibernate 1.4.0和NHibernate 3.3.1。我正在運行一個同步程序,該程序從多個會話中打開,並在處理大型數據集時創建多個查詢。我使用的所有數據結構都是終止的,並且通常有限長度。我從CLRProfiler工具中找到的是SessionFactoryImpl類越來越大。附帶堆轉儲的流利Nhibernate內存泄漏

這裏的應用

轉到鏈接https://app.box.com/s/pvbe9ryfb0v168rka2e3看到內存堆轉儲的內存堆轉儲。

我在整個應用程序中使用無狀態會話,並且使用塊來包裝所有內容。我給自己定了我的會話工廠的創建者有以下行

return Fluently.Configure().Database(cfg).Mappings(m => { 
      var fluentMappings = m.FluentMappings; 

      fluentMappings.Add<UCBPremMap>(); 
      fluentMappings.Add<UTVSSFXMap>(); 
     }).Cache(c => { 
      c.Not.UseQueryCache(); 
      c.Not.UseSecondLevelCache(); 
     }).BuildSessionFactory(); 

但我想從我的堆圖的解釋,NHibernate的緩存數據結構繼續增長,直到我用盡內存。

當試圖解析另一個表達式樹(我試圖最小化數據庫調用,有時候我只能按內容搜索字段,這會創建一個帶有1000個單獨where子句的表達式樹)時,通常也會發生堆棧溢出。

任何幫助將不勝感激。另一個程序中,我的同事也注意到他的程序正在觸發OutOfMemory異常,這也表明NHibernate存在內存泄漏。

+0

你有沒有發現問題?有沒有泄漏?我有類似的問題。 – Mithon 2016-06-07 17:01:19

回答