我必须用DataSet实现一个异步DB连接方法,所以我首先尝试使用SqlDataReader来填充DataSet。但这需要太多时间。
这是代码:
使用 DataTable.Load
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(conString)
{
SqlCommand cmd = new Sqlcommand(query, conn);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (!reader.IsClosed)
{
DataTable dt = new DataTable();
dt.BeginLoadData();
//////////////////////////////////////
dt.Load(reader); // takes too much
//////////////////////////////////////
dt.EndLoadData();
ds.Tables.Add(dt);
}
}
使用 SqlDataAdapter.Fill
DataSet ds = new DataSet();
using (SqlConnection conn = new SqlConnection(conString))
{
...
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(ds);
}
我认为这两种方法做的事情完全相同。但是当读取数据库中的 2400 行时,第一种方法平均需要 20 毫秒,否则第二种方法只需 7 毫秒。
有什么我错过的或代码错误的吗?