2011-08-12 11 views
4

私は以下の動作を知りたいと思います。ISessionFactory.OpenSession()複数スレッドから

基本的に私は静的なISessionFactoryと、実行中のスレッドが10個あるアプリケーションがあり、それぞれがISessionFactory.OpenSession()を使ってISessionを取得します。これは問題を引き起こすでしょうか?

答えて

4

いいえ。これは正しいです。スレッドごとに別々のセッションがあることを確認する必要があります。

+1

静的なISessionFactory.OpenSession()は常に新しいISessionを返します。 – Eatdoku

+2

それは私の理解です、はい。 – csano

1

SessionFactoryはスレッドセーフですが、Sessionではありません。したがって、スレッド内のISessionFactory.OpenSession()でセッションを開き、他のスレッドと共有せずにそのスレッド内で使用すると、安全に行くことができます。

しかし、複数のtheradsの中でISessionFactory.GetCurrentSession()を使用しないでください。

1

この問題は発生しますが、ことを確認してくださいません。ISessionインスタンスあなたが「リーク」していない

  • (他のスレッドが今までそれにアクセスすることができません)

  • あなたが適切にあなたはもはや一方ISessionFactory

それを必要とするとき、セッションを廃棄しないことは、スレッドセーフであり、あなたのpの追加同期せずに、複数のスレッドから使​​用することができますアート。

using(ISession session = _sessionFactory.OpenSession()) { 
    // use session making sure it will not become visible to other threads 
} 
関連する問題