2011-07-13 5 views
3

SQL Server 2008の新しいアプリケーションにFluent NHibernateを使用することを検討していますが、私が見ている接続処理の動作を理解できません。 SessionFactoryのが作成されると NHibernate Connection Pooling

  1. は、単一の接続が開かれている:私はここにsp_who2を使用して接続を監視しています

    は、私が見たものです。この接続 は、アプリが死ぬまで開かれたままです。

  2. 新しいセッションが開かれても接続が開かれません。 (これは大丈夫です、私はNHibernateがデータベース接続を作成する最後の瞬間まで待つことを理解しています)。

  3. NHibernate経由でクエリを実行しても、新しい接続が開かれません。 SessionFactoryが作成されたときに作成された接続を使用していると仮定する必要があります。これはまだ開いています。クエリの後(セッションが閉じられる前)にブレークポイントを設定し、sp_whoに新しいセッションが現れませんでした。

アプリ全体を1つの接続で実行することはできません(明らかに)。 各セッションが独自の接続を確立するにはどうすればよいですか?私はここに何か明白なものがあると確信しています...

ありがとうございます。

答えて

6

動作は、NHibernate固有のものではありません。SQL Serverでは、接続プーリングは既定の動作です。
一見したところでぎこちなく聞こえるかもしれませんが、実際には新しい接続を作成して維持するのは費用がかかります。
(詳細については、Wikipedia article about connection poolingを参照してください)

だから、実際には既存の接続を再利用すると、SQL Serverのパフォーマンスを向上するためNHは、セッションごとに新しい接続を開くために取得しようとする必要はありません。