当前位置:首页 > 系统运维 > 正文内容

详解ASP.NET在SQL Server 2005上自定义分页

a8116255311年前 (2015-10-04)系统运维13

WEB开发中普遍会用页面来显示数据。比起整页显示一张报表或者一张数据表的数据给用户,开发者经常用到的是分页显示,每页只显示部分数据,用翻页来控制。在ASPV.net 1.X里,DataGrid控件使翻页显示变得简单—只需要把属性AllowPaging设置为”true”,并在PageIndexChanged事件中加少量几行的代码就可以实现!ASP.NET 2.0中的控件GridView使事件也简单化了,只需要在GridView的智能面板里把“允许分页”选中,不需要一行代码就可以实现。

当然了,生活中没有任何事是容易就能做好的。你需要权衡选中一个复选框就能实现的分页方案(或者用DataGrid,写几行代码的实现方案)的性能。假如不选中分页,DataGrid和GridView使用默认分页,简单的把所有数据从头到尾地显示在一张网页上。当数据量小时,几十一百或类似的数量时,效率性能不会太明显。但是,假如你想像这样用默认的分页 *** 显示上千万、以至几十万的书时就不可行了。

取代默认分页的 *** 就是自定义分页,你要做的工作就是用代码来判断并把正确的分页数据取出,可能会费点事,但对于应付如此庞大的数据量来说,绝对值得。我们来看在ASP.NET 2.0中如何利用SQL Server 2005的新特性 ROW_NUMBER()来实现自定义分页。(更多关于SQL SERVER的新特性说明,请看利用microsoft SQL SERVER 2005返回列值。)

默认分页与自定义分页对比

在ASP.NET 2.0里GridView(或ASP.NET 1.X里的DataGrid)提供两种分页模型:默认分页与自定义分页。这两种模型在性能与易用性上提供了折中的方案。SqlDataSource控件使用默认分页(尽管你可以在自定义分页了使用它);ObjectDataSource默认使用默认分页模型,不过有个简单的配置可以让它使用自定义分页。心里要时刻记得GridView仅仅是显示数据;它才是GridView负责从数据库中检索数据的数据源控件。

使用默认分页,每次打开新页显并显示时,都要从GridView的数据源控件中获得所有数据。一旦全部的数据返回,GridView就把所有的数据全显示在页面上,于是用户看到一张页面上显示了如此多的数据。关键要理解这里,无论何时当用户访问之一页或翻到其他页时,所有的数据都会被重新加载一遍。

举个例子,比如说你在一家电子商务公司上班,你想让用户分页查看你们公司所销售的150中产品。并且,你想每页只显示10条数据。现在,当一个用户访问网页时,所有150条数据都被数据源空间返回过来。但GridView只显示之一个10条数据(产品1到产品10)。再想象一下,当这个用户翻看第二页的数据时,这会引发一个回发的事件,而且在这个时候GridView又会从数据源控件中获得所有的150条记录,但这时只需要显示第二个10条(产品11到产品20)。

缓存与SqlDataSource

SqlDataCourse在对属性EnableCaching做简单设置后允许数据集缓存数据。对于一个缓存的数据集,翻页时不需要再访问数据库,从分页开始到结束都缓存在内存里。然而,初始化页面时相同的问题发生了—所有的数据必须载入到缓存的数据集里去。此外,这样的话你还必须担忧那些过期的数据(虽然你使用了SQL cache dependencies ,但在这里已经没意义了)。

在我不太科学的测试下,发现缓存数据和自定义分页的速度差2倍以上……尽管,你看到缓存方式接近不缓存的方式。(但它始终没有超过自定义分页!)

更多关于SqlDataSource的数据集缓存,请看利用SqlDataSource缓存数据. 

使用自定义分页,你,开发者,需要做一些工作,但比起盲目的把GridView绑定到一个数据源控件,并且选中“允许分页”复选框,倒不如配置一下数据源控件,使它只检索某一页需要显示的部分数据。这样做的好处是,当显示之一页的数据时,你可以写一段只检索产品1到产品10的sql语句,而不是把所有150条记录全取出来。不过,你的sql语句需要“聪明”的知道怎么把需要的数据从150条记录里剪切出来。

自定义分页的性能优势

我们可以从数据记录的检索能看出自定义分页比默认分页的性能好。在我们的例子里,假设有150条产品数据,每页显示10条。假如用自定义分页,用户挨个浏览这15页的数据,150条数据会分批检索出来;假如用自定义分页,不管哪页150条数据都会被检索出来,导致全部的数据检索量也许是15倍的15条,可能有2250条之多!

虽然自定义分页的性能显而易见,但默认分页却非常简单。所以当数据量小并且数据库服务器的负载也不太重时,我推荐你使用默认分页。假如你有几百、上千以至上万条数据需要分页显示时,一定要使用自定义分页。当然,像分页ASPFAQ.com的数据库,现在的数据量只有200条问答,用默认分页足够了。(当然,假如你觉得数据量将来不会增长,比如可能会维持在75条左右,那你就使用默认分页。但假如将来数据会增长到7500条而你却使用了默认分页,一定会有些客户不高兴的!)

利用SQL Server 2005高效地取回一页数据

像早前4Guys 的一篇文章讲述的那样,利用Microsoft SQL Server 2005获得行值中提到的, SQL Server 2005 引入了许多返回行值的关键词。特别提到关键词the ROW_NUMBER()可以返回一列递增的行数。因此,我们可以使ROW_NUMBER()写一条像下面的sql查询语句来获得某页的数据:

SELECT ...

默认分页

持续时间 (秒) 读取数量

(从Employees检索一页记录)

持续时间 (秒) 读取数量

默认分页

(从Employees查询所有记录)
页面载入时间(秒)
2.34136852588807
2.35772228034569
2.43368277253115
2.43237562315881
2.33167064529151
平均: 2.379363969

自定义分页
(从Employees查询一页记录)
页面载入时间(秒)
0.0259611207569677
0.0280046765720224
0.0359054013848129
0.0295534767686955
0.0300096800012292
平均: 0.029886871

SqlDataSource缓存
(查询所有记录,但缓存它们)
页面载入时间(秒)
2.39666633608461
0.0431529705591074
0.0443528437273452
0.0442313199023898
0.0491523364002967
平均: 0.515511161

正如你看到的,自定义分页要比默认分页快2倍以上。在相同的数据量下,GetEmployeesSubset(@startRowindex int,@maximumROws int)要比简单的从Employees表中SELECT查询出所有记录要快470倍。在相同的ASP.NET环境下,自定义分页要比默认分页快120倍。.高负荷的工作量使两者接近,也就是说建立数据库连接和分配任务都会降低性能。不管怎样,在性能方面两个数量级相差太大了。并且这种差距会随着数据量的增加或服务器的性能不同使载入更加明显。

当缓存是空的时,SqlDataSource方案消耗时间很长,因为它必须到数据库去取得所有数据,缓存在服务器。而服务器有空闲资源时才重新载入(假如只有少量的资源,缓存的数据集就会被清除出内存)并且不再载入。在数据被缓存后,虽然在性能上很接近自定义分页,但0.516秒的平均时间会随着越来越多的缓存数据而接近0.05秒。

总结

ASP.NET 1.x中的DataGrid和2.0中的GridView有两种分页方案:默认分页与自定义分页。默认分页很容易做到,但每次访问每个页面都会访问数据库并取出所有数据。而自定义分页非常高效,灵活地取出该取出的那些数据。SQL SERVER 2005由于它的新特性ROW_NUMBER()能取出行数的能力,使取出某段数据简单了。

假如你做的WEB程序现在或将来有可能让用户翻页查看庞大的数据,那么你用自定义分页是很合适的。

上一篇 返回首页 下一篇

声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

别人在看

电脑屏幕不小心竖起来了?别慌,快捷键搞定

Destoon 模板存放规则及语法参考

Destoon系统常量与变量

Destoon系统目录文件结构说明

Destoon 系统安装指南

Destoon会员公司主页模板风格添加 ***

Destoon 二次开发入门

Microsoft 将于 2026 年 10 月终止对 Windows 11 SE 的支持

Windows 11 存储感知如何设置?了解Windows 11 存储感知开启的好处

Windows 11 24H2 更新灾难:系统升级了,SSD固态盘不见了...

IT头条

Synology 更新 ActiveProtect Manager 1.1 以增强企业 *** 弹性和合规性

00:43

新的 Rubrik Agent Cloud 加速了可信的企业 AI *** 部署

00:34

宇树科技 G1人形机器人,拉动一辆重达1.4吨的汽车

00:21

Cloudera 调查发现,96% 的企业已将 AI 集成到核心业务流程中,这表明 AI 已从竞争优势转变为强制性实践

02:05

投资者反对马斯克 1 万亿美元薪酬方案,要求重组特斯拉董事会

01:18

技术热点

大型网站的 HTTPS 实践(三):基于协议和配置的优化

ubuntu下右键菜单添加新建word、excel文档等快捷方式

Sublime Text 简明教程

用户定义SQL Server函数的描述

怎么在windows 7开始菜单中添加下载选项?

SQL Server 2016将有哪些功能改进?

IT技术网 版权所有 © 2020-2025京ICP备14047533号-20,Power by OK设计网

在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/22477.html

分享给朋友:

“详解ASP.NET在SQL Server 2005上自定义分页” 的相关文章

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

故障现象: Windows 7酷狗软件无声音,系统声音正常。 原因分析: 1. 查看酷狗软件设置 2. 查看系统设置 解决方案: 1. Windows 7操作方法 如图:查看是否处于禁音状态   Windows 7系统声音正常酷狗音乐无声音 2. 查看设置音频输出是否...

解决windows 7无法将程序锁定到任务栏或附到开始菜单的方法

解决windows 7无法将程序锁定到任务栏或附到开始菜单的方法

出现该问题的原因是由于使用第三方优化软件消除快捷方式的小箭头引起的。 1、在开始搜索框中键入“regedit”,按回车键打开注册表编辑器。 2、依次定位到以下分支:HKEY_CLASSES_ROOTlnkfile。 3、在lnkfile项上鼠标右键单击“新建”——“字符串值”。...

windows 7 xp宋体 成功替换windows 7宋体为XP宋体的方法

windows 7 xp宋体 成功替换windows 7宋体为XP宋体的方法

很多朋友从XP升级迈入了Windows 7的殿堂,却发现,Windows 7确实好用和华丽,可是有一些地方不太适应。今天举出一则例子,是把Windows 7系统下的宋体替换为XP系统下的字体。这个并非无聊,大家去网上搜索下,就知道有多少人想要这么做了。 没办法,每人的需求总是那么的不同,好吧,怀旧...

windows 7玩战争策略游戏星际争霸花屏问题解决方法

windows 7玩战争策略游戏星际争霸花屏问题解决方法

星际争霸是一款非常经典的战争策略游戏,虽然已有十多年的历史,但依然有一批忠实的游戏玩家坚守着星际战争,而随着Windows系统的不断更新,Windows 7下玩星际争霸已经不能像WinXP那样顺利了,很多Windows 7玩家在玩星际争霸时候都会出现花屏问题,那么我们该如何应对呢 Windo...

windows 7如何将常用文件夹添加到任务栏以提高工作效率

windows 7如何将常用文件夹添加到任务栏以提高工作效率

每一位用户的Windows 7系统上,或多或少都会有一到两个自己常用的文件夹,那么如何将这些常用的文件夹添加到任务栏上,增加我们的工作效率呢 许多用户只知道移动exe程序文件到任务栏,却不知道文件夹怎么移,下面小编通过图文教程来告诉大家方法。 操作方法: 1、首先将你使用频率最高的那个文件夹重命...

Windows7启动后连上了网但网络图标不停转圈怎么办

Windows7启动后连上了网但网络图标不停转圈怎么办

Windows 7电脑开机后,虽然连上了网络,但是网络图标却一直不停地转圈,这个问题该怎么修复呢?今天小编就告诉大家解决的方法吧。 解决方法: 1、假如是打补丁后出现的问题。 第一时间卸载驱动精灵,并且把它的文件夹彻底删除,要干净,用360粉碎! 2、开启network list ser...