0

Stack Overflow でこのような同様の質問があることは知っていますが、私が試した内容とはまったく一致しません。最終結果は同じですが、この問題の理由は異なると思います。

私のサイトが約 2、3 日間実行されているときはいつでも、次のエラーが発生します (これは明らかに、接続/クエリがハングしているか、適切に破棄されていないことが原因です)。

タイムアウトになりました。プールから接続を取得する前に、タイムアウト期間が経過しました。これは、プールされたすべての接続が使用中で、最大プール サイズに達したために発生した可能性があります。

最初に調査を行ったところusing、 を使用したり、finalize通話を使用したり、その他のソリューションを使用したりするだけでは不十分であることがわかりました。エラーは最終的にまだ発生します。

そこで、Visual Studio のサーバー エクスプローラー (私がよく使用する) が接続をリークするかどうかを調べることにしました。すでに最大実行と接続タイムアウトを 3 秒に変更し、プール サイズを 10 接続に減らしていたので、サーバー エクスプローラーが原因である可能性があります。運が悪い!

それで、私は今何を試しますか?

4

1 に答える 1

-1

これが私が問題を解決したコードです。接続時に例外をキャッチし、すべてのプールをクリアしてから、再試行してください。

_connection =
    new SqlConnection(connectionString);
try
{
    _connection.Open();
}
catch (InvalidOperationException)
{
    SqlConnection.ClearAllPools();
    _connection.Open();
}

また、接続を破棄するときは、必ずプールをクリアしてください。

if (_connection != null)
{
    SqlConnection.ClearAllPools();
    _connection.Close();
    _connection.Dispose();
}
于 2013-05-17T17:59:13.280 に答える