.Net中的DataTable是一種非常好的儲存資料的容器,它像一個移動資料庫一樣。
有時候,DataTable中會被存放大量的資料,但是對於你來說並不是所有的資料都是有用的,這時面對那些資料就要快速的提取出自己需要的。在DataTable中提取資料的方法有以下幾種:
1、使用for迴圈語句;2、使用foreach迴圈語句;3、使用DataTable類中內建的select()方法。
首先看一段代碼:
DataTable dt = new DataTable();
dt.Columns.Add("I_ID", typeof(string));
DateTime dt1 = DateTime.Now;
for (int i = 0; i < 1000000; i++)
{
dt.Rows.Add(dt.NewRow());
dt.Rows[i]["I_ID"] = i.ToString();
}
TimeSpan sp = DateTime.Now - dt1;
string sp1 = sp.TotalMilliseconds.ToString();
DateTime dt2 = DateTime.Now;
DataRow[] drs1 = dt.Select("I_ID='999999'");
sp = DateTime.Now - dt2;
string sp2 = sp.TotalMilliseconds.ToString();
DateTime dt3 = DateTime.Now;
DataRow[] drs2 = dt.Select("I_ID='999999'", "I_ID DESC");
sp = DateTime.Now - dt3;
string sp3 = sp.TotalMilliseconds.ToString();
DateTime dt4 = DateTime.Now;
DataRow[] drs3 = dt.Select("I_ID='999999'", "I_ID DESC", DataViewRowState.CurrentRows);
sp = DateTime.Now - dt4;
string sp4 = sp.TotalMilliseconds.ToString();
DateTime dt5 = DateTime.Now;
DataRow[] drs4 = dt.Select("I_ID='999999'", "I_ID ASC");
sp = DateTime.Now - dt5;
string sp5 = sp.TotalMilliseconds.ToString();
DateTime dt6 = DateTime.Now;
for (int i = 0; i < 1000000; i++)
{
if (dt.Rows[i]["I_ID"].Equals("999999"))
{
break;
}
}
sp = DateTime.Now - dt6;
string sp6 = sp.TotalMilliseconds.ToString();
DateTime dt7 = DateTime.Now;
foreach (DataRow dr in dt.Rows)
{
if (dr["I_ID"].Equals("999999"))
{
break;
}
}
sp = DateTime.Now - dt7;
string sp7 = sp.TotalMilliseconds.ToString();
Response.Write(sp1 + " " + sp2 + " " + sp3 + " " + sp4 + " " + sp5 + " " + sp6 + " " + sp7);
然後再看一下結果:
13943.3133 17093.2977 0 0 0 1621.3155 386.0275
通過顯示的結果我們應該明白哪一種方法的效率最高了。