[英]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.