1

TransactionScopeを作成しました。スコープ内で、データベースにさまざまなアイテムが作成および更新されます。このプロセス中に、私はデータベースに対して多くの呼び出しを行います。もともと、TransactionScopeの最初にSqlConnectionを開き、それをDB呼び出しを行った関数に渡し、すべての呼び出しが行われた後、トランザクションがコミットする前に接続を閉じました。これを行うのが良いですか、それとも呼び出しごとに(同じ接続文字列を使用して)接続を開いたり閉じたりする方が良いですか?

4

4 に答える 4

4

連続して多数の呼び出しを行う予定で、開いている接続を簡単に渡すことができる場合は、はい、開いている接続を再利用します。

ただし、これはそれほど重要ではありません。以前ほどではありません。ADO.NETは、これを適切に管理します。接続プールを参照してください。コードが複雑で奇妙になり、1つの開いた接続オブジェクトを容易にする場合は、それだけの価値はありません。

(これで、接続オブジェクト(再利用されているかどうかに関係なく)が破棄されていることを確認することは、もちろん非常に重要です。すでにご存知のとおりです。)

于 2010-05-20T20:54:50.163 に答える
4

私はどうしても接続を回さないようにする傾向があります。たとえば、他の誰かが同じ接続を使用することを知らなかったために、一連の操作の途中で他の誰かが接続を閉じたときに、システムに忍び寄るエラーが多すぎるのを見たばかりです。

SQLConnectionの作成は、 ADO.NETの接続プールメカニズムによりほぼ無料です。そのため、SQLConnectionを作成して渡すことで、スペースや時間を節約できるとは思わないでください。

あなたの状況のように、トランザクションスコープ内で本当に多くのDB操作を実行する必要がある場合は、スコープを適切に管理しますが、必要に応じて接続を作成、使用、および破棄します-それは維持するのに役立ちますあなたのコードはもっときれいで安全です。

于 2010-05-20T22:54:28.067 に答える
2

一般的に、私は他の人が言ったことに同意します。ただし、単一のTransactionScopeインスタンス内で複数の接続を使用すると、(ローカル)トランザクションが分散トランザクションに昇格するため、かなりのオーバーヘッドが発生する可能性があることに注意してください。

同じプールからの複数の接続、つまり同じデータベースを使用する接続も、この意味で複数の接続としてカウントされます。

コード構造や「クリーンさ」、一般的なSQLステートメントの実行時間などと比較して、それが問題になる場合は、決定する必要があります。

于 2010-05-25T11:15:20.797 に答える
0

とにかく、DBへの複数の接続が必要な場合は、接続プールを使用します。

于 2010-05-20T20:57:24.357 に答える