簡體   English   中英

Foreach和SqlConnection使用語句

[英]Foreach and SqlConnection Using Statement

我試圖找出哪種更有效。 我有一個表的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;
            }
        }
    }
}

我正在嘗試對此進行優化,以便更快地從數據庫中提取數據,但不確定如何推薦/更好。 忠告會很好。

您必須嘗試並進行測量才能確定,但​​是我懷疑您會在兩種方式上看到巨大的差異。 連接由.NET池化,因此以循環方式創建連接(我假設您只有幾個表,而不是幾百個表)應該不是很大的瓶頸。 您可能會在網絡I / O上花費更多時間,並實際填充DataSet(這確實有很多開銷)。

底線-即工作(所以你有什么要恢復到),並嘗試多種方式,看看一個方法,使整體的應用顯著差異細微的一種方式。

通常,在網絡環境中多次打開和關閉數據庫連接可能會很昂貴(連接數據經過您的網絡數圈,C#CLR必須多次分配和釋放資源,垃圾收集以后有更多工作要做。) 。),因此您應該嘗試通過將其置於循環之外來重用數據庫連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM