在 "using" 语句中启动 sql 对象与使用 using 语句装饰之间的区别

Difference between initiating sql object inside "using" statement and decorating with using statement

我怀疑在同一代码块中以不同方式应用 "Using" 语句有什么显着差异,最好知道对我来说最好的做法 相同的 1 个代码块

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;

using 语句是语法糖,可以释放资源(例如内存或句柄),而无需自己编写代码。所以像

这样的代码片段
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 语句)更可取,因为它会立即释放所有不再需要的资源。