2016-08-08 8 views
-1

"Using"ステートメントを同じコードブロックで異なる方法で適用することによって大きな違いがあるのは間違いです。私のため sameple 1つのコードブロック"using"ステートメント内でsqlオブジェクトを開始し、ステートメントを使用して装飾することの相違点

using (SqlConnection SqlConnection = new SqlConnection(dbConnectionString)) 
       { 
        SqlConnection.Open(); 
        using (var command = new SqlCommand(store_procName, SqlConnection)) 
        { 
         command.Parameters.Add(Constants.PARAM_Value, SqlDbType.VarChar).Value = Id; 
         command.CommandType = CommandType.StoredProcedure; 
         using (var adp = new SqlDataAdapter(command)) 
         { 
          adp.Fill(dtValid); 
         } 
        } 
       } 
       return dtValid; 

サンプルコードブ​​ロック2

using (SqlConnection SqlConnection = new SqlConnection(dbConnectionString)) 
       { 
        SqlConnection.Open(); 
        SqlCommand command = new SqlCommand(store_procName, SqlConnection);      
        command.Parameters.Add(Constants.PARAM_Value, SqlDbType.VarChar).Value = Id; 
        command.CommandType = CommandType.StoredProcedure; 
        SqlDataAdapter adp = new SqlDataAdapter(command); 
        adp.Fill(dtValid);      

       } 
       return dtValid; 
+3

これは 'asp.net-mv'c固有のものではなく、' sql-serve'rの特定の質問でもありません。ちょうどC#。さらに、読みやすくするためにコードを書式設定するために投稿する前に余分な10秒を費やしてください。 :) – Shyju

+0

実際に私はMVCフレームワークで、そのようなシナリオに遭遇するかもしれないと思っています。 –

+0

見てくださいhttp://stackoverflow.com/questions/3715126/what-is-meant-by-connection-dispose-in-c –

答えて

1

using文が目を記述することなく、リソース(例えば、メモリまたはハンドル)を解放する構文糖である最良の方法あなた自身のためのeコード。だから、

using (var adp = new SqlDataAdapter(command)) 
{ 
    adp.Fill(dtValid); 
} 

のようなコードスニペットがのようなものに変換されます。

SqlAdapter adp = null; 
try 
{ 
    adp = new SqlDataAdapter(command); 
    adp.Fill(dtValid); 
} 
finally 
{ 
    if (adp != null) adp.Dispose(); 
    // or rather (adp as IDisposable)?.Dispose(); 
} 

(これはあなたのアイデア、コンパイラによって生成必ずしも正確なコードを与えるための一例に過ぎません)。

コード内のusingステートメントを除外すると、インスタンスのDispose()メソッドがこの時点で呼び出されません。最終的にガベージコレクションはこれらのオブジェクトをクリーンアップします(通常はDispose()への呼び出しにつながります)。

このメソッドへの呼び出しが多く、多くのデータを読み込んでSqlCommandSqlDataAdapterが多くのリソースを消費する場合は、違いがあります。これらのリソースをできるだけ早く公開したい場合は、usingステートメントにコードを含める必要があります。

ベストプラクティス(多くの場合、趣味の問題です)を求めています。ほとんどの場合、最初のスニペット(すべてのusingステートメントを使用)は、不要になったすべてのリソースをすぐに解放するため、望ましいものです。

関連する問題