我怀疑使用"使用"有什么重大区别?在同一个代码块中以不同的方式声明,知道练习对我来说是最好的方法 sameple 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;
答案 0 :(得分:1)
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()
)。
如果您对此方法进行了大量调用并读取了大量数据,那么差异是相关的,因此SqlCommand
和SqlDataAdapter
会占用大量资源。如果您想尽快发布这些资源,则应将代码包含在using
语句中。
您要求最佳实践(这通常是品味的问题)。在大多数情况下,第一个代码段(包含所有using
语句)更可取,因为它会立即释放不再需要的所有资源。