我有一個winforms系統C#.Net 2.0與ActiveRecord + NHibernate與PostgreSQL 9數據庫進行通信。 當用戶打開系統時,通過新的SessionScope()啓動與數據庫的通信。對於某些用戶來說,它的工作原理是完美的...但對於其他用戶而言,系統會產生內存泄漏,與msdn論壇中的Marcio問題相同:link。 我該如何解決這個問題?問題是在NHibernate!當我嘗試關閉ISession對象或嘗試提交事務時發生此錯誤。NHibernate + ActiveRecord + PostgreSQL = memoryexception
2
A
回答
1
OutOfMemoryException的根本原因可能在您發佈的代碼之外。你只是有內存泄漏,它可以在你的應用程序的任何地方。試圖分配更多內存的代碼會引發異常,而這些代碼不一定會導致內存泄漏。使用內存profiler來找出導致內存泄漏的原因。
但很可能這個問題是由於NHibernate中第一級緩存臃腫所致。從SessionScope文件:
與此同時,NHibernate的是保持變更範圍內的對象 的軌道。如果有太多的對象和太多的變化 要跟蹤,那麼性能會慢慢降級。所以現在需要衝洗 。
- 擺脫GC呼叫,你不需要它們。
- 限制會話的範圍
- 沖洗/清除會議定期
- 確保您使用lazy loading適當(不要裝入你不從數據庫所需的信息)
相關問題
- 1. ActiveRecord,NHibernate和PostgreSQL
- 2. ActiveRecord/NHibernate DateTime問題
- 3. ActiveRecord和NHibernate Spatial
- 4. NHibernate或FluentNHibernate或ActiveRecord?
- 5. ActiveRecord + postgresql +數據限制
- 6. ActiveRecord&Postgresql:查詢jsonb屬性
- 7. 使用Castle ActiveRecord和Fluent NHibernate?
- 8. LINQ到NHibernate的狀態ActiveRecord
- 9. HQLBasedQuery ProjectionQuery城堡ActiveRecord/NHibernate
- 10. ActiveRecord(NHibernate)渴望加載Bug?
- 11. C#String/StringBuilder MemoryException對大集替換
- 12. (流利)NHibernate和PostgreSQL 9
- 13. 許可:NET + NHibernate/MySQL/MSSQL/PostgreSQL/
- 14. PostgreSQL的ActiveRecord的怪事了。最大
- 15. PostgreSQL的ILIKE與Rails的ActiveRecord的
- 16. 優雅的PostgreSQL Group by Ruby on Rails/ActiveRecord
- 17. ActiveRecord的,PostgreSQL的適配器錯誤
- 18. Rails的4×PostgreSQL的:ActiveRecord的:: InvalidForeignKey
- 19. 的PostgreSQL和ActiveRecord的 - 慢查詢
- 20. 將ActiveRecord語句轉換爲postgresql查詢 - Rails 4/postgresql 9.4
- 21. 請安裝PostgreSQL的適配器:`安裝了activerecord-PostgreSQL相關adapter`
- 22. Nhibernate和Activerecord的數據庫性能
- 23. NHibernate&Castle ActiveRecord - 通過做或RTFM學習?
- 24. Castle ActiveRecord/NHibernate - 密碼加密或散列
- 25. NHibernate + ActiveRecord +爲永不加載映射?
- 26. ActiveRecord/NHibernate實體模型的可視化
- 27. ActiveRecord/nHibernate SQL生成「安全」嗎?
- 28. 使用nHibernate和Castle ActiveRecord配置NCache
- 29. MonoRail ActiveRecord/NHibernate計算在哪裏條款
- 30. 使用Linq到Nhibernate的Castle ActiveRecord示例
哦...感謝您的回答。但是...我有一個登錄方法,總是適用於某些用戶,並且總是對其他用戶無效。錯誤不是隨機的!當NHibernate嘗試提交事務時總會發生這種情況! 我已經在我的代碼中加入了GC調用來嘗試解決問題,它們不是我的源代碼的標準。 在NHibernate的範圍內沒有太多的對象,因爲應用程序剛剛開始。錯誤是在函數login()中! – KaH600
和: 是的!我正在定期清理會議!我有一個保護函數CloseSession()這樣做! 是的!我正確使用「懶惰」!沒有負載信息我不需要!我的代碼中有很多「Lazy = true」! 我認爲這是NHibernate的內部錯誤... Marcio(msdn,鏈接頂部)有同樣的問題!你對此有何看法? 我是巴西人......對不起,我的英語不好! ;) – KaH600
NHibernate中的錯誤是可能的,但不太可能。您的應用程序中可能存在內存泄漏。也許你對物體的保留時間超過需要,GC無法清除它們。使用我在答案中提到的內存分析器,他們有免費試用版。 – Dmitry