我想知道以下行爲。來自多個線程的ISessionFactory.OpenSession()
基本上我有一個靜態ISessionFactory,並與10個線程的應用程序運行,並且他們每個人將使用ISessionFactory.OpenSession()來獲取一個ISession。這會導致任何問題嗎?
我想知道以下行爲。來自多個線程的ISessionFactory.OpenSession()
基本上我有一個靜態ISessionFactory,並與10個線程的應用程序運行,並且他們每個人將使用ISessionFactory.OpenSession()來獲取一個ISession。這會導致任何問題嗎?
不,這是正確的。你想確保你有一個單獨的會話爲每個線程。
SessionFactory是線程安全的,但不是Session。因此,如果您在一個線程中使用ISessionFactory.OpenSession()打開一個會話並在其中(在該線程內)使用它,而不與其他線程共享,則您可以安全地繼續。
但是不要在多個文件夾中使用ISessionFactory.GetCurrentSession()。
這不會引起任何問題,但要確保:
你不「泄漏」 ISession實例(沒有其他線程將永遠有機會獲得它)
你正確配置會話時,你不再需要它
ISessionFactory,另一方面是線程安全的,可以從多個線程對您的p爲使用,無需額外的同步藝術。
using(ISession session = _sessionFactory.OpenSession()) {
// use session making sure it will not become visible to other threads
}
那麼靜態的ISessionFactory.OpenSession()會一直返回一個新的ISession呢? – Eatdoku
這是我的理解,是的。 – csano