Sat*_*ngh 25 c# datatable performance sqldatareader sqldataadapter
我想知道哪一个具有更好的返回性能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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用SqlDataAdapter:
public DataTable populateUsingDataAdapter(string myQuery)
{
SqlDataAdapter dap = new SqlDataAdapter(myQuery,cn);
DataSet ds = new DataSet();
dap.Fill(ds);
return ds.Tables[0];
}
Run Code Online (Sandbox Code Playgroud)
Joe*_*Joe 23
差异可以忽略不计,因此使用更简洁的版本可能更好: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;
}
}
Run Code Online (Sandbox Code Playgroud)
SqlDataReader从历史上看,速度明显快于SqlDataAdapter. .NET 4.5 可能有所改进,但我怀疑它的改进是否足以超过 DataReader 的性能。