Foreach和SqlConnection使用语句

本文关键字:语句 SqlConnection Foreach | 更新日期: 2023-09-27 18:19:54

我正在努力找出哪种运行效率更高。我有一个foreach表,我想知道它是在我使用之外还是在它内部。

foreach:内部的using (SqlConnection)

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;
            }
        }
    }
}

我正在尝试优化它,以便更快地从数据库中提取,我不确定推荐/更好的方式。建议太好了。

Foreach和SqlConnection使用语句

您必须尝试并测量它以确定,但我怀疑您是否会看到巨大的差异。连接是由.NET汇集的,所以在一个循环中创建它们(我假设你只有少数几个表,而不是几百个)应该不是一个显著的瓶颈。您可能会在网络I/O和实际填充数据集上花费更多的时间(确实有很多开销)。

最重要的是,确定一种有效的方法(这样你就有了可以恢复的东西),并尝试多种方法,看看一种方法是否对整个应用程序产生了重大影响。

通常,在网络环境中多次打开和关闭数据库连接可能会很昂贵(连接数据会在网络中传输几轮,C#CLR必须多次分配和释放资源,垃圾回收稍后还有更多工作要做…),所以你应该试着通过将数据库连接放在循环之外来重用它。