与SqlDataAdapter.Fill()相比,DataTable.Load()花费的时间太长

时间:2013-07-10 05:48:39

标签: c# performance datatable dataset sqldataadapter

我必须使用DataSet实现异步数据库连接方法,所以首先我尝试使用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);
}

我认为这两种方法完全相同。但是当在DB中读取2400行时,第一种方法平均需要20ms,否则第二种方法只需要7ms。

我有什么遗漏或代码错了吗?

2 个答案:

答案 0 :(得分:1)

我建议您使用SqlDataAdapter::Fill(DataSet)

DataSet ds = new DataSet();
ds.Clear();
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(ds);
DataTable dt = ds.Tables[0];

答案 1 :(得分:0)

试试这个:

SqlDataReader reader = cmd.ExecuteReader();
DataTable dt = new DataTable();           
dt.Load(reader);             
ds.Tables.Add(dt);