.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
通过显示的结果我们应该明白哪一种方法的效率最高了。