0

最近、Webアプリを変更して、1つの接続を作成し、それをすべてのコマンドに再利用するのではなく、コマンドごとにデータベース接続を作成しました。私は今日の午後にこのコードを使用し、データベースメモリは最大24GBの使用量になり、約8kの挿入を実行しました。私のコードは次のようなものです(半擬似コード):

public int ExecSQL(string SQLStr)
{
    using (SqlConnection Con = new SqlConnection(MyConStr))
    {
        using (SqlCommand Cmd = new SqlCommand(SQLStr, Con))
        {
            return Cmd.ExecuteNonQuery();
        }
    }
}

using (TransactionScope TX = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    //Loop and perform 8000 x
    int ID = ExecSQL("insert into something (column) output unique_id values ('data')").
    // I also perform 1 or 2 selects per insert based on the ID returned from the insert. I don't use a .Supress for my inserts.
}

これにより、データベースのメモリ使用量が高くなる可能性がありますか?100個の接続(デフォルト)を作成してから再利用し続けるべきだという印象を受けましたが、何かが足りないと思います。

回答:次のSQLを実行しました:

SELECT 
    DB_NAME(dbid) as DBName, 
    COUNT(dbid) as NumberOfConnections,
    loginame as LoginName
FROM
    sys.sysprocesses
WHERE 
    dbid > 0
GROUP BY 
    dbid, loginame

データベースに開いている接続は1つしかないため、問題は発生していません。今何であるかを見つけるために..

4

1 に答える 1

1

ADO.NET は接続プールを使用するため、同じ接続文字列を持つ複数のSqlConnectionオブジェクトが同じ物理データベース接続を再利用します。メモリの増加が使用によって引き起こされたことはほとんどありませんnew SqlConnection()

于 2012-04-04T18:12:34.187 に答える