FineUI 官方论坛

标题: Grid内存分页与数据库分页的区别 [打印本页]

作者: awxtggg    时间: 2012-3-20 11:01
标题: Grid内存分页与数据库分页的区别
看上示例,但还是没有明白内存分页与数据库分页的区别在哪儿
数据库分页时,使用的是

DataTable table = GetPagedDataTable(Grid1.PageIndex, Grid1.PageSize);

从GetPagedDataTable函数中可以看到,数据来源是这样的:

DataTable source = GetDataTable();
DataTable paged = source.Clone();

而内存分页时使用的是
DataTable table = GetDataTable();
Grid1.DataSource = table;
Grid1.DataBind();

我认为,如果记录有1000条,那么无论使用数据库分页还是使用内存分页,都是要先把1000条记录先从数据库服务器读到IIS服务器,然后再做处理。如果是这样的话,数据库分页方式,每次翻页都要去申请一次1000条记录,而内存分页方式,把1000条数据都保存在了内存中,虽然占用了内存,但不用每次都去重新申请数据。

我的理解对吗?正确的情况应该是怎么样的?


作者: 淼墨惢    时间: 2012-3-20 13:42
内存分页就是一次提取一张表的数据全部放在内存中,然后绑定到grid控件中,然后利用grid的属性进行分页显示,数据库分页是每次换页的时候都需要从数据库中重新提取数据,提取的数据量就是grid定义的显示的条数,只返回所需要的数据,而不是全部返回
作者: awxtggg    时间: 2012-3-20 14:34
从示例来看的话,它的GetDataTable()并没有参数,直接插入了11条记录,那如果要对数据库进行操作的话,应该如何处理呢?自己写相应的参数吗?
作者: 水若寒冰    时间: 2012-3-21 08:54
当然得写相应的参数了,譬如:目前你看的是第一页,每页100条记录,你想看第3页的数据,肯定得查第201到第300条记录的数据了,总得输入查询条件吧
作者: 落末醉    时间: 2012-3-21 10:35
有没啥办法结合这两种方法,先载当前页,异步把数据全载下来放内存
作者: 水若寒冰    时间: 2012-3-21 10:59
落末醉 发表于 2012-3-21 10:35
有没啥办法结合这两种方法,先载当前页,异步把数据全载下来放内存


个人认为没那必要。如果数据量比较小,你可以一次读取出来使用内存分页。数据量比较大的时候使用数据库分页。这样都能发挥出各自的优点
作者: 孤独的过客    时间: 2012-3-21 21:21
这个数据库分页的问题都不解决的话,就根本不应该去写商业的项目,否则就太........
因为一般商业的项目.数据都是非常大的.全部取出,该是多么痛苦的事情

作者: 30372245    时间: 2012-3-22 21:30
水若寒冰 发表于 2012-3-21 10:59
个人认为没那必要。如果数据量比较小,你可以一次读取出来使用内存分页。数据量比较大的时候使用数据库分 ...

顶!这个分析很精辟。一般超过500条数据都要考虑数据库分页
作者: 水若寒冰    时间: 2012-3-23 09:35
本帖最后由 水若寒冰 于 2012-3-23 09:37 编辑
孤独的过客 发表于 2012-3-21 21:21
这个数据库分页的问题都不解决的话,就根本不应该去写商业的项目,否则就太........
因为一般商业的项目.数据 ...


建议你用SubSonic做对数据库的操作,SubSonic功能还是相当强大的。里面就包括了数据库分页的功能,用起来也很方便。再者说了,像数据库分页你完全可以自己写存储过程去实现。一个人的精力毕竟有限,方方面面都要考虑到的确不容易。能实现大部分功能已经很了不起了。
作者: 落末醉    时间: 2012-3-23 16:03
水若寒冰 发表于 2012-3-21 10:59
个人认为没那必要。如果数据量比较小,你可以一次读取出来使用内存分页。数据量比较大的时候使用数据库分 ...

如果可以实现 数据量大肯定有优势
作者: 水若寒冰    时间: 2012-3-26 09:06
落末醉 发表于 2012-3-23 16:03
如果可以实现 数据量大肯定有优势

你可以试下,利用webservice。插入2万条记录到数据库,当你读取剩余的数据时我保证你电脑的cpu使用率在100%不会下来。页面处于无反应状态
作者: Landroid    时间: 2012-3-26 11:43
建议使用数据库分页。
查询时,传入参数pageSize,pageIndex和条件参数,
使用select top * 。。。或者其他方法查询到当前页的数据就可以了。
作者: 碎心逝夢    时间: 2012-3-27 15:18
如果是用ORM框架的话,使用LINQ分页是个不错的选择
作者: 大石头    时间: 2012-4-2 10:19
这个数据库分页开关,仅用于计算分页,并不会为你执行分页的数据库操作。
随意,怎么样取数据,还是靠你自己。

我昨天扩展了ExtAspNet,增加了DataSourceID的支持,直接可以绑定ObjectDataSource,然后可以自动的调用ObjectDataSource进行分页查询、排序、删除等操作




欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4