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);
}
これら2つの方法はまったく同じことを行うと思います。しかし、DB で 2400 行を読み取る場合、最初の方法は平均で 20 ミリ秒かかり、それ以外の場合は 2 番目の方法はわずか 7 ミリ秒しかかかりません。
見逃したものはありますか、それともコードが間違っていますか?