解决方案 »
- 请帮我参考下该如何正确使用缓存
- js跨浏览器问题
- 零分提问! 是否有必要用到数据仓库 我的分用完了 怎么办
- 这里人多,所以从图表版过来问了,crystal report 问题
- 我写了一个 ProsceniumBasPage 类继承 System.Web.UI.Page 然后页面类再继承这个 ProsceniumBasPage 类.但在这个类里面却不能用Session.
- 在线求助```NET的路径映射问题
- 如何在javascript中得到RegularExpressionValidator的验证结果
- 用JavaScript的对话框,有什么办法知道用户点了确定还是取消?
- 服务器端产生的Cristal Reporter,可以直接送到客户端打印输出吗?(不在IE中预览)
- 求一达人帮我调试一个商业程序。
- .net发布IIS使用一段时间突然报错
- 给TD添加id
还有建议LZ用存储过程来分页哈,这样效率要高
原有的系统中几乎已经完成,所有的绑定读取数据都是用的读取数据库返回List<model>的方式,我想过使用dataset,但是这样改动太大
这完全可以。显然如果仅仅在你这个记录过滤方法,假设使用DataTable/DataSet读取然后再过滤掉start条记录,会慢得无法接受了,绝对不能使用什么DataSet。使用游标来以.net程序控制跳过start条记录,你就只能使用DBDataReder。
它其实就是跟你的方法一样,使用DbDaatReader读取,并且前start个记录跳过(也就是不读取到内存里)。因此原理跟你的代码一样,而且显然没有你的代码更简洁方便(因为DataSet要维护有很多状态和其它功能)。所以说,你的代码不但是正确的,而且比所谓的DataSet分页要轻快多了。而至于说同样的sql语句,是不是写成存储过程就“执行得快了”,我想你自己测试下就知道了,看看到底有几毛钱价值,到底是方便了还是繁琐了。
如果是这样的话在数据库查询的时候为什么不直接查询相应分页的数据条数呢?
这样就会大大提高运行的效率了,用datareader也ok的
我觉得本身从数据库里面读取100W条数据就是一个很大的开销了,在此基础上优化出来的效果就很不明显了,
所以还是建议LZ尽量改成读取相应分页条数的数据,你想那么多方法去优化还不如改了你的代码。
还有另一个LZ可以建议数据库的缓存,那这样的话对读取数据的压力就会减小很多,运行速度也会大大加快。
DataSet 就是用 DataReader 构建的。初学者别模仿动软的代码,DataTableToList 就绕弯路了。