作業ユニットは、私は、トランザクションなどのために気にしない場合は、より効率的ですか?
-
06-09-2019 - |
質問
私は自分のWebページ上の10回のデータベース呼び出しがあり、それらのどれもが、すべてのトランザクションを必要としない場合など 彼らは単に私はまだ仕事クラスのユニットを使用する必要があり、データベース(読み込み)からデータを取得していますか?
データベース呼び出しごとに新しいセッションを作成することは、あまりにも高価であるため、これは?
解決
NHibernateのでは、セッションファクトリの作成は非常に高価である(そう、あなたがそれを作成しています後は、おそらくHttpApplication
に、セッションファクトリをキャッシュしたいと思う)が、セッションの作成は非常に安いです。それはあなたのコードクリーナーを保つ言い換えれば、複数のセッション作品は必ずしも悪いことではありません。私は、NHのドキュメントが最善のことを言うと思います。
アンISessionFactoryです 高価なツー作成し、スレッドセーフなオブジェクト すべてによって共有されることを意図 アプリケーションスレッド。 ISessionがあります 安価な、非スレッドセーフなオブジェクト それは、単一のため、一度使用する必要があります その後、ビジネス・プロセス、および破棄されます。
だから、UOWパターンを使用すると、おそらく余分なオーバーヘッドをのよりの効率的ではありませんが、それは良い練習とオーバーヘッドはおそらくあなたを傷つけるつもりはないですよ。時期尚早の最適化とすべてのこと。
他のヒント
はい、あなたは、トランザクションを使用する必要があります。 Ayendeのブログから:
「NHibernateのは、データベースへのすべてのアクセスがトランザクションの下で行われていることを前提とし、強くトランザクションなしでのセッションのいずれかの使用を阻止する。」
詳細については、ここで彼のブログ投稿へのリンクがあります:
<のhref = "http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx" のrel = "nofollowをnoreferrer "> http://ayende.com/Blog/archive/2008/12/28/nh-prof-alerts-use-of-implicit-transactions-is-discouraged.aspx の