2012-02-14 6 views
2

読み取り専用操作のためにNHibernateセッションをプールすることにマイルがありますか?システムがたくさんの読み込みをしているだけで、いくつかの書き込みしかない場合は、データを読み込み、明示的に変更をコミットしなければならないときに新しいセッションを開く目的で再利用されるセッションのプールを作成することは理にかなっていますか?NHibernateセッションの読み取り専用プール?

私の考えは、価値があるのは、データを読むために1分に1000回のリクエストがあるとしたらどうでしょうか?これらの読み込みがミリ秒単位で短期間で行われていた場合、1000個のセッションを作成して処理する代わりに、セッションプール(たとえば3つ)ですべてを処理できる可能性があります。

答えて

2

あなたの考えは既にpooledであるデータベース接続に適用できます。特別な操作は必要ありません。デフォルトで有効になっています。

NHibernateセッションはデータベース接続と等しくありません。セッションはNHibernateのUnit of Workパターンの実装です。作業ユニットのプール単位は、各作業ユニットがロードされたすべてのオブジェクト(変更追跡のため)上に保持され、ガベージコレクションできないため危険です。たとえそれをプールに戻す前にUOWをクリアしても、UOW/ISessionを作成するのが安く、データベース接続を割り振りません。

NHibernateでメモリ消費量を最適化する場合は、このanswerをご覧ください。

2

セッションの作成と廃棄は非常に軽量で、接続プールによって処理されます。 IMOでは、セッションプーリングを使用するメリットはありません。セッションキャッシュ内にロードされたすべてのオブジェクトが保持されるため、セッションが再利用されるとメモリリークやパフォーマンスが低下するという欠点があります。

関連する問題