[英]SqlDataReader vs SqlDataAdapter: which one has the better performance for returning a DataTable?
我想知道哪一個具有更好的性能來返回DataTable
。 這里為SqlDataReader
我使用DataTable.Load(dr)
使用SqlDataReader
:
public static DataTable populateUsingDataReader(string myQuery)
{
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(constring))
{
SqlCommand cmd = new SqlCommand(myQuery, con);
con.Open();
SqlDataReader dr = null;
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (dr.HasRows)
{
dt.Load(dr);
}
return dt;
}
}
使用SqlDataAdapter
:
public DataTable populateUsingDataAdapter(string myQuery)
{
SqlDataAdapter dap = new SqlDataAdapter(myQuery,cn);
DataSet ds = new DataSet();
dap.Fill(ds);
return ds.Tables[0];
}
差異可以忽略不計,因此使用更簡潔的版本可能更好: SqlDataAdapter.Fill
。
SqlDataReader.Fill
在內部創建一個內部類LoadAdapter
(從DataAdapter
派生),並調用其Fill
方法:性能與SqlDataAdapter.Fill(DataTable)
非常相似。
參數的初始化/驗證會有一些小的差異,但隨着行數的增加,這將變得越來越不重要。
另請注意,您的第二個樣本應該修改為與第一個樣本相當:
public DataTable populateUsingDataAdapter(string myQuery)
{
using (SqlConnection con = new SqlConnection(constring))
{
SqlDataAdapter dap = new SqlDataAdapter(myQuery,con);
DataTable dt = new DataTable();
dap.Fill(dt);
return dt;
}
}
SqlDataReader
歷史上比SqlDataAdapter
快得多。 可能已經在.NET 4.5中進行了改進,但是我懷疑它已經改進到足以超過DataReader的性能。
SqlDataReader將比SQlDataAdapter更快,因為它在連接狀態下工作,這意味着第一個結果一旦可用就會從查詢中返回。
除了選定的解決方案,我想補充一點:
使用DataReader,您不需要知道您擁有哪種類型的DbConnection。
您只需要一個實現IDbConnection的實例,您可以使用“connection.CreateCommand”然后使用“dbCommand.ExecuteReader”然后使用dataTable.Load。
但是當你使用DataAdapter時,你需要知道使用了哪個連接(即oracle,sqlserver等)
(這與線程啟動程序無關,但我在尋找此主題時使用g ** gle登陸此處。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.