DataTable幾種讀取資料的效能比較

DataTable迴圈的讀取方式一般常見的有for、foreach、DataTableReader這幾種,這三種方法各自運用或考量點會根據當時的狀況不同使用的方式也不同,因此這裡只是單純的進行三種方式的效能比較。

下圖為實際比較的結果,從數據上看在資料量少的時候,使用for迴圈再效能上是最優異的,但隨著資料量越來越大,foreach迴圈的優勢就慢慢顯現出來了,DataTableReader的效能則是最差的,但實際的使用情境還是要視情況來自行決定了。

測試的程式碼如下
private static void Execute(int count)
{
 DataTable dt = new DataTable();
 dt.Columns.Add("ID");
 dt.Columns.Add("ID1");
 dt.Columns.Add("ID2");
 dt.Columns.Add("ID3");
 
 for(int i =0; i < count; i++)
 {
  DataRow row = dt.NewRow();
  row["ID"] = Guid.NewGuid();
  row["ID1"] = Guid.NewGuid();
  row["ID2"] = Guid.NewGuid();
  row["ID3"] = Guid.NewGuid();
  
  dt.Rows.Add(row);
 }
 
 System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
 
 sw.Start();
 using (DataTableReader dr = dt.CreateDataReader())
 {
  while (dr.Read()) { }
 }
 sw.Stop();
 Console.WriteLine("\tDataTableReader 所耗時間 :: {0}", sw.Elapsed.TotalMilliseconds);

 sw.Reset();
 sw.Start();
 foreach(DataRow row in dt.Rows)
 {
 }
 sw.Stop();
 Console.WriteLine("\tforeach DataRow 所耗時間 :: {0}", sw.Elapsed.TotalMilliseconds);
 
 sw.Reset();
 sw.Start();
 for(int i=0; i< dt.Rows.Count;i++)
 {
  DataRow row = dt.Rows[i];
 }
 sw.Stop();
 Console.WriteLine("\tfor DataRow 所耗時間 :: {0}", sw.Elapsed.TotalMilliseconds);
}

留言