在用於運行作業的windows web服務的上下文中,我們嘗試重用我們爲Web應用程序開發的NHibernate DAL。NHibernate會話(和無狀態會話)和長時間運行的應用程序
會話管理,我們有兩個選擇,每一個有它的優點和缺點:
有狀態會話
- 去,因爲它跟蹤的一切成長了很多(L1 /會話緩存)
- 需要小心關閉,會話處理似乎不足以清除L1緩存(我注意到使用內存分析器)
無狀態會話
- 目前無法重用的映射。
初始化[...]未能初始化懶洋洋角色的集合:與「懶=真正的」聲明的所有包包除了具有以下不同(儘管會議沒有被關閉)結束 [...],沒有會話或會話關閉
很顯然,我們不能更新映射(它們與Web應用程序共享)與懶惰=「假」,這會是一個巨大的缺點表演
- 不能與二級緩存交互:當共享L2緩存將被部署,該服務將無法以無效的L2高速緩存數據的Web應用程序有NHibernate的事實證明,勁達最新數據
直到現在,我們已經成功地在Web上下文中使用有狀態會話和NHibernate LINQ,並使用結構映射來進行依賴注入。
我的問題是:
- 是否有良好的解決方案,在一個長期運行的線程使用NHibernate的?
- 我寧願使用有狀態會話,但如何避免內存泄漏?