0

Webアプリケーションで接続を閉じないことの影響は何ですか?

私が理解していることから、プールに100の接続があり、接続を閉じず、接続のタイムアウトがかなり長い場合、これは内部で起こったことです。

  1. 接続を開くと、プールから接続が取得されます
  2. 閉じないと、タイムアウトが経過するまで開いたままになり、その後、バックグラウンドスレッドがプールをループして、接続を明示的に閉じてプールに戻します。

c#は管理されていますが、ページリクエストが正しく終了した後に終了するという意味ではありませんか?それがタイムアウト設定の正しいものですか? または、.netランタイムは、ページリクエストが終了したため、接続を閉じることができることを知っているほど賢いですか?

これは本当ですか?

4

2 に答える 2

0

接続プーリングとは、接続を閉じる(または接続を破棄する)ときに、実際には閉じられず、単にプールに戻されることを意味します。これにより、接続を再利用できます。

実装する管理対象オブジェクトはIDisposable、usingステートメント内で使用する必要があります(ほとんどの場合、WCFは明らかな例外でした)。これによりSqlConnection、closeが呼び出され、接続を再利用できるようになります。

ガベージコレクターは、ある時点で未処理の接続を取得して処理しますが、決定論的ではないため、いつ処理されるかはわかりません。

SQL接続は限られたリソースであり、プール内の接続が不足しないように、できるだけ早くそれらを閉じる必要があります

于 2013-01-29T17:19:55.000 に答える
0

すべての接続を明示的に閉じて、別のプロセスで使用できるように接続プールに解放することを常にお勧めします。

SqlConnection オブジェクトがある場合は、ページ リクエストの後に解放する必要があります。これは、System.Web.UI.Page オブジェクトと SqlConnection オブジェクトの両方が IDisposable を実装しているためです。Page へのリクエストが完了すると、Page オブジェクトは Disposed になります。SqlConnection オブジェクトが破棄されると、接続が閉じられます。これが、using ステートメント内に実装された SqlConnection オブジェクトのほとんどの使用を目にする理由です。

    using (SqlConnection connection = new SqlConnection(
  "Integrated Security=SSPI;Initial Catalog=Northwind"))
    {
        connection.Open();      
        // Pool A is created.
    }

明示的に閉じるか、using ステートメントを使用することを常にお勧めします。

詳細については、この記事を参照してください: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx

于 2013-01-29T17:24:38.497 に答える