本文所有的测试环境如下:
- 数据库操作:Enterprise Library 3.1
- 数据库:Sql server 2005
- 硬件:E2140 双核1.6 内存1G
- Framework 2.0
- Vs.net 2005
对比DataSet和DataReader的性能:
DataSet的测试代码如下:
private void button1_Click_1(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); DateTime d1 = DateTime.Now; for (int i = 0; i < 2000; i++) { try { string strSql = "select top 100 * from t_csp_vesselschedule "; DataTable dt = db.ExecuteDataSet(CommandType.Text, strSql).Tables[0]; foreach (DataRow d in dt.Rows) { sb.Append(d["id"].ToString()); sb.Append(d["carriercode"].ToString()); sb.Append(d["vesselvoyage"].ToString()); } } catch(Exception ex) { throw ex; } } DateTime d2 = DateTime.Now; TimeSpan t1=d2-d1; label1.Text = t1.TotalMilliseconds.ToString(); textBox3.Text = label1.Text; }
DataReader的测试代码如下:
private void button3_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); DateTime d1 = DateTime.Now; for (int i = 0; i < 2000; i++) { try { string strSql = "select top 100 * from t_csp_vesselschedule "; IDataReader dr = db.ExecuteReader(CommandType.Text, strSql); while (dr.Read()) { sb.Append(dr["id"].ToString()); sb.Append(dr["carriercode"].ToString()); sb.Append(dr["vesselvoyage"].ToString()); } dr.Close(); } catch { } } DateTime d2 = DateTime.Now; TimeSpan t1 = d2 - d1; label2.Text = t1.TotalMilliseconds.ToString(); textBox4.Text = label2.Text; }
测试结果是:
- DataSet 7031.25;
- DataReader 4843.75;
- 很明显DataReader要快于DataSet,但是值得提醒的是在出现异常的情况下,要注意DataReader对象在finally中的关闭,否则会造成Reader对象未关闭,数据库出现无数的连接;
- 需要提醒的是DataSet本身都是来源于DataReader,只是把数据包装了;
812

被折叠的 条评论
为什么被折叠?



