悬赏分:100 浏览:410 次
各位老大,小弟原来用面向过程的方法编程,具体方法
方法1.
private void GetItem(string id)
{
DataSet ds = DataAccess. GetDataSet("sql语句");
this.datagrid1.dataSource = ds;
this.datagrid1.dataBind();
}
现在想换成如下:方法2
public IList<Account> GetAccounts() {
IList<Account> account = new List<Account>();
using (SqlDataReader reader = SQLHelper.ExecuteReader(SQLHelper.ConnectionString, CommandType.Text, SQL_SELECT_ACCOUNTS, null)) {
while (reader.Read()) {
Account myAcount = new Account(reader.GetString(0), reader.GetString(1), reader.GetString(2), reader.GetString(3), reader.GetString(4), null, null, null, reader.GetString(8), reader.GetString(9));
account.Add(myAcount);
}
}
return account;
}
this.datagrid.datasource = GetAccounts();
this.datagrid.dataBind();
现在我想问的是:第2种方法中的红色部分会对read中的每行数据产生一个新的对象实体,最终返回对象集合,这样下来,效率上会不会有很大的降低?
另外,从程序运行效率方面考虑,运用那种方法比较好,谢谢!
|
关注!! 个人感觉效率上实际差别应该不大。 如果一定要选择一个,相对而言选择第2种方法。 DataSet是重量级的,ExecuteReader是只读的。 第二种效率比第一种要高,DataSet本身构造太复杂,效率低下。 现在用第二种的比较多~~ 第二种效率高,但与第一种相比差距不大 SqlDataReader 这个对象的效率是最高的 但是不方便控制输出的内容,比如我要取第N行第M列的数据,SqlDataReader 这个对象就不好处理. DataSet 是重量级的对象,效率最低,但是可以同时查询出多个表的内容,如在一个存储过程里有多条 select * from [表名] 都可以放到这个对象里,用的时候用到哪个表的内容就取哪个表的数据,方便! 但是我建议你使用 DataTable 这个对象取值,它效率比DataSet高,比SqlDataReader 方便控制 看你如何选择,DataReader是只读的,速度快,DataSet则操作比较多,注意最后关闭数据库 建议使用第二种方式,另外可以,通过反射把Account属性和DataReader的字段自动关联起来,Cache一下Account PropertyInfo,这样可以少些一些代码 |
|
4个月前 Edward.Net : 每种方法都有它适用的环境,如果仅从性能上考虑的话还是第二种比较高。实际上DataSet也是通过遍历DataReader构建的数据结构,而且结构非常复杂,每次看Reflector的时候都看得眼睛发花。 |
|
4个月前 .Net Zoo : 关键是看你的需要了,如果你只是为了显示数据的话,用DataReader,如果你想在GridView中有很多数据操作的话,用DataSet |