【发布时间】:2015-10-31 04:25:22
【问题描述】:
我正在尝试找出哪个运行效率更高。我有一个foreach 的表格,我想知道它应该在我的使用范围之外还是在其中。以下示例。
using (SqlConnection) 内的foreach:
foreach (string tableName in desiredTables)
{
using (SqlConnection connection = new SqlConnection(cloudConnectionString))
{
connection.Open();
string query = string.Format("SELECT id, active, createdon, modifiedon FROM {0}", tableName);
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
SqlDataAdapter dAdapter = new SqlDataAdapter(cmd);
try
{
dAdapter.Fill(dSet, tableName);
}
catch
{
throw;
}
}
}
}
与using (SqlConnection) 内部的foreach 相比:
using (SqlConnection connection = new SqlConnection(cloudConnectionString))
{
connection.Open();
foreach (string tableName in desiredTables)
{
string query = string.Format("SELECT id, active, createdon, modifiedon FROM {0}", tableName);
using (SqlCommand cmd = connection.CreateCommand())
{
cmd.CommandText = query;
cmd.CommandType = CommandType.Text;
SqlDataAdapter dAdapter = new SqlDataAdapter(cmd);
try
{
dAdapter.Fill(dSet, tableName);
}
catch
{
throw;
}
}
}
}
我正在尝试对此进行优化,以便更快地从数据库中提取数据,但我不确定推荐/更好的方式。建议会很棒。
【问题讨论】:
-
哪个更快?尝试测量每个版本一百万次。
-
这是一个重复的任务,还是一个很少使用的操作?
-
仅供参考,
catch { throw; }毫无意义 - 甚至可能没有catch块(或在这种情况下为try)。 -
真的吗?与从池中打开连接一样快,为什么要做多次。至于那你为什么要循环使用SqlCommand?为什么你一次只删除一个表而不是一个 DataSet?
标签: c# sql optimization foreach