2012-02-15 7 views
2

リソース使用の最適化のための1つのパラダイムがあります。このパラダイムを考慮して。私は、DBの呼び出しに、次のシーケンスを常にを参照してください。リソース最適化の質問.net

  1. オープンconneciton
  2. 検証
  3. 設定パラメータ
  4. が最終的に私場合

が間違っanythngされるコマンドを実行します

  • コマンドを作成行う?

    1. 検証
    2. 設定パラメータ
    3. オープンconnecitonが最終的にコマンド

    例えば

    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandText = "cus"; 
    cmd.CommandType = CommandType.StoredProcedure; 
    //Configure input parameters 
    SqlParameter param = new SqlParameter(); 
    param = cmd.Parameters.Add(new SqlParameter("@id", 2)); 
    param.Direction = ParameterDirection.Input; 
    SqlConnection conn = new SqlConnection("Data Source=localhost; Integrated Security=SSPI; Initial Catalog=SpringApp;"); 
    conn.Open(); 
    cmd.Connection = conn; 
    cmd.Prepare(); 
    SqlDataReader reader = cmd.ExecuteReader(); 
    
  • +0

    あなたの質問を編集することができます – Blorgbeard

    +0

    あなたの接続を閉じてください – gprasant

    答えて

    1

    はい、2番目のシーケンスが優れています。どのくらいの仕事が1,2,3になるかによって異なります。私は通常、CreateCommandとSetParameterを大きな問題として考えていませんが、検証にはある程度の時間がかかるかもしれないし、すべてをキャンセルすることさえあります。あなたがすでにConnectionを開いていて、データが見つからない場合、残念です。

    2

    のThを実行しない

  • コマンドを作成

    オープンとして遅くできるだけconnectionし、できるだけ早くとしてそれを閉じる:電子後者の場合は、どこへ行くrigth方法です。

  • 0

    あなたはあなたのパラダイムで言うこととまったく同じことをしています。

    1)オープンconnecitonはあなたの接続を開く前に、可能ですすべてのもの、特別な検証を行う必要があります獲得のoposite後半

    です。 完了したら、 "using"ステートメントを使用して接続を開いて自動クローズします

    2

    2番目のシーケンスは問題ありません。実際にはコマンドを作成するのにかなりの時間がかかります短い時間で接続を開きます(通常、コマンドを作成するのにはほとんど時間がかかりませんので、これには大きな違いはありません)。

    私はリソースを処分すると、あなたのオブジェクトの寿命が何であるか、それをより明確にするために、あなたはusing statement可能な限りを使用することをお勧めします:

    using (SqlCommand cmd = new SqlCommand()) 
    { 
        cmd.CommandText = "cus"; 
        cmd.CommandType = CommandType.StoredProcedure; 
        //Configure input parameters 
        SqlParameter param = new SqlParameter(); 
        param = cmd.Parameters.Add(new SqlParameter("@id", 2)); 
        param.Direction = ParameterDirection.Input; 
    
        using (SqlConnection conn = new SqlConnection("Data Source=localhost; Integrated Security=SSPI; Initial Catalog=SpringApp;")) 
        { 
         conn.Open(); 
         cmd.Connection = conn; 
         cmd.Prepare(); 
    
         using (SqlDataReader reader = cmd.ExecuteReader()) 
         { 
    
         } 
        } 
    } 
    
    1

    番目のバージョンは、小さなほんの少し、より効率的です。しかし、実際それは全く問題ではありません。私はあなたがそれを測定することはできないと思う。コマンドの作成はRPCアクティビティではありません。コマンドはあなたのRAMのほんの数バイトです。それは安いです。

    しかし、あなたがリソース管理を気にしているのなら、あなたの使い捨て物を使用ブロックに入れるのは罪ではありません!例外が発生した場合、SqlConnectionがリークします。

    あなたのお電話の準備はノーオペレーション(What does SqlCommand.Prepare() do and when should it be used?)で、削除することができます。

    関連する問題