私はASP.NET MVCアプリケーションにFoxproを移行しています。あまりにも多くの接続Asp.net
ロジックの70%近くがSqlServerストアドプロシージャに組み込まれています。そのため、いくつかのテーブルを更新するためにいくつかのプロシージャを使用しています(SPをマップしません.SqlDataReader、SqlCommand、SqlAddapterを使用してSqlConnectionを呼び出すだけです)。
問題は、各呼び出しで多くの接続が開かれることです。それでも呼び出しごとに接続が閉じられます。 sp_whoを実行すると、同じユーザーに対して複数の接続が開かれたように見えます。
各接続のクローズとディスポーザリングを実行する現在の方法は何ですか?
アクティブな接続を見つけて再利用することは可能ですか?
SqlConnection.ClearAllpools();
しかし、それはすぐに有効になりません。
最後の試みでした。 接続を実行するIDisposabelクラス接続があります。この方法は、各リクエストの後に呼び出され
public void close()
{
SqlConnection.ClearAllPools();
//.ClearPool(BdTransCx);
// SqlConnection.ClearPool(BdArchCx);
if (ConectarArchivos)
{
if (BdArchCx.State == ConnectionState.Open)
{
BdArchCx.Close();
}
}
if (BdArchCx.State == ConnectionState.Open)
{
BdTransCx.Close();
}
}
: これはcloseメソッドを解除しています。
あなたがそれを終えるとすぐに接続。 [using-statement](http://msdn.microsoft.com/en-us/library/yh598w02.aspx)を見てください。 connection-poolは、接続を閉じていないときにその接続を再利用できないと考えています。終了はプールのフラグに過ぎないことに注意してください。実際にはデータベースへの接続は開いたままにして、できるだけ早く再利用できるようにしておきます。プール内のすべての接続が使用中(開かれている)の場合、プールは非常に高価な新しい物理接続を作成します。 MaxPoolSize(デフォルトは100)に達していますが、例外が発生しています。 –
非常に。あなたが話しているcloseメソッドはSqlConnection.close()ですか?またはusingでなければなりません:using-statement? –
'BdArchCx'は' SqlConnection': 'BdArchCxです。try/catchのfinallyブロックのClose()は 'using(var BdArchCx = new SqlConnection(conString)){}'と似ています。これは 'using'が暗黙的に接続を閉じる' dispose'を呼び出すためです。できるだけ早く 'IDisposable'を実装するすべてのオブジェクトを処分することをお勧めします。 –