2009-08-07 99 views
4

我創建了一個正在監聽MSMQ的Windows服務。對於我收到的每條消息,都需要進行一些數據庫事務處理。稍後有可能每秒鐘會有1條消息。 目前,Nhib會話保持打開狀態,直到手動停止服務。 這是一種很好的做法,還是應該在每封郵件後關閉會話?NHibernate會話需要多久/應該保持開放狀態?

在此先感謝

回答

4

NHibernate會話的目的是相對較短的時間,所以它通常不是一個好主意,以保持活躍一段較長的時間。會話緩存實體,當更多的實體被提取時,如果你不以某種方式管理緩存,則會緩存更多的數據。這導致性能下降。

NHibernate的文檔描述的ISession這樣的:

表示應用和持久存儲之間的對話的單個線程的,短暫的對象。包裝一個ADO.NET連接。 ITransaction工廠。保存持久對象的強制性(第一級)緩存,用於瀏覽對象圖或通過標識符查找對象。

我會建議使用的session-per-談話,即如果你有幾個分貝的操作是「屬於一起」您使用的這些操作相同的會話,但是當這些操作完成後您關閉會話。

因此,爲每個處理消息使用新的會話聽起來像個好主意。

0

與此相反的會話工廠(ISessionFactory)是線程安全的,你應該打開並與每一個數據庫事務關閉會話(ISession的)。