8

次の2つの方法のどちらがパフォーマンスが優れていますか?

using( var DB_Connection_s = new DBConnection() )
{
 //todo: interact with database connection
}

あるいは単に :

DB_Connection_s.Close();

最後に。

最初の方法は、プーリングの概念を役に立たなくしますか?使用するたびに接続を破棄すると、毎回新しい接続を開く必要があるためです(プール内に接続はありません)。

4

4 に答える 4

7

Dispose呼び出しはとにかく接続を閉じるので、usingパターンはより良いですが、ボーナスとして、使用中の何かがうまくいかなくても接続は閉じられます。たとえば、プログラムの実行をusingスコープから強制的に外す例外または単なるリターン。を使用すると、接続を明示的に閉じる必要がなくなり、コードが読みやすくなります。別のパターンとして、接続はできるだけ早く閉じる必要があります。接続プールによって接続の再利用が最適化されるため、接続を頻繁に閉じたり開いたりしても、パフォーマンス上の欠点はありません。

于 2012-07-12T09:04:51.360 に答える
5

接続でCloseまたはDisposeを呼び出すと、接続はプールに解放されます。

ソース= SQLServer接続プール(ADO.NET)

したがって、プールされた接続の欠落によって引き起こされるパフォーマンスの低下についての心配を取り除きます。
コードの観点からは、違いは最小限である必要があるため、usingステートメントは常に使用する必要があります

于 2012-07-12T09:07:18.350 に答える
1

Disposeを使用します。内部的にはDispose内で接続が閉じられるため、心配する必要はありません。疑わしい場合は、Reflectorなどで簡単に確認できます。

パフォーマンスに関しては、私はまだ使用に行きます。Windowsではさまざまなキャッシュが有効になっており(確かにODBCで)、同じ接続への繰り返しの要求に対して再利用が発生する可能性があるため、パフォーマンスについて心配する必要はありません。

于 2012-07-12T09:01:42.193 に答える
1

近いうちに.Open()を再度呼び出す場合を除いて、

ブロックを使用しusing(){}ます。

同じ接続をすぐに別の場所で使用する場合は、そのときなどに
電話.close(); し てください.open()...
クラスの実装IDisposableを維持し、そこで接続を破棄してください。

Connectionオブジェクトの作成にはまだ時間がかかります

于 2013-07-03T08:50:53.707 に答える