2010-05-13 122 views
4

我的公司有一個ASP.Net應用程序,它在內存不足的情況下運行,並在客戶進行了幾天的活動後拋出內存異常。我能夠在我們的測試環境中重現錯誤,並使用adplus創建了掛起轉儲。當查看堆中最大/最多的對象時,我注意到我們有超過500,000個NHibernate.SqlCommand.Parameter對象。這不可能是正確的!我們有33個sessionfactories實例化了總數,並且每個客戶端數據庫有1個sessionfactory。我們使用的nhibernate的版本是2.1.0.4000。NHibernate內存泄漏

我們禁用了二級緩存,查詢計劃緩存和查詢緩存。我們仍然在內存轉儲中看到500,000個NHibernate.SqlCommand.Parameter。

有沒有看到這種行爲?

+0

您正在使用哪個驅動程序? – 2010-05-14 07:30:13

回答

1

我們也有類似的問題,我們的應用程序(NHibernate的2.1.2.4000,ODP.net 2.111.7.0在Windows 7)。當我們將數據插入到數據庫中,我們結束了一個巨大的內存和處理泄漏:

for (int i=1;i<10000;i++) 
{ 
    using (var session = _sessionFactory.OpenSession(); 
    { 
     var tx = session.OpenTransaction() 
     // insert a few rows into one table 
     tx.Commit() 
    } 
} 

的問題唯一的解決方法是設置在連接字符串中爭取=虛假或使用OracleClientDriver代替OracleDataClientDriver的。這個問題在NHibernate 1.2中沒有發生。當我們用TransactionScope試用這個時,連接泄漏更嚴重了。