编写高性能 Web 应用程序的 10 个技巧
日期:2007年11月6日 作者: 查看:[大字体 中字体 小字体]-
仔细查看您的数据库代码,看是否存在多次进入数据库的请求路径。每个这样的往返都会降低应用程序可以提供的每秒请求数量。通过在一个数据库请求中返回多个结果集,可以节省与数据库进行通信所需的总时间长度。同时因为减少了数据库服务器管理请求的工作,还会使得系统伸缩性更强。
虽然可以使用动态 SQL 返回多个结果集,但是我首选使用存储过程。关于业务逻辑是否应该驻留于存储过程的问题还存在一些争议,但是我认为,如果存储过程中的逻辑可以约束返回数据的话(缩小数据集的大小、缩短网络上所花费时间,不必筛选逻辑层的数据),则应赞成这样做。
使用 SqlCommand 实例及其 ExecuteReader 方法填充强类型的业务类时,可以通过调用 NextResult 将结果集指针向前移动。图 1 显示了使用类型类填充几个 ArrayList 的示例会话。只从数据库返回您需要的数据将进一步减少服务器上的内存分配。
返回页首
技巧 2 — 分页的数据访问
ASP.NET DataGrid 具有一个很好的功能:数据分页支持。在 DataGrid 中启用分页时,一次会显示固定数量的记录。另外,在 DataGrid 的底部还会显示分页 UI,以便在记录之间进行导航。该分页 UI 使您能够在所显示的数据之间向前和向后导航,并且一次显示固定数量的记录。
还有一个小小的波折。使用 DataGrid 的分页需要所有数据均与网格进行绑定。例如,您的数据层需要返回所有数据,那么 DataGrid 就会基于当前页筛选显示的所有记录。如果通过 DataGrid 进行分页时返回了 100,000 个记录,那么针对每个请求会放弃 99,975 个记录(假设每页大小为 25 个记录)。当记录的数量不断增加时,应用程序的性能就会受到影响,因为针对每个请求必须发送越来越多的数据。
要编写性能更好的分页代码,一个极佳的方式是使用存储过程。图 2 显示了针对 Northwind 数据库中的 Orders 表进行分页的一个示例存储过程。简而言之,您此时要做的只是传递页索引和页大小。然后就会计算合适的结果集,并将其返回。
在社区服务器中,我们编写了一个分页服务器控件,以完成所有的数据分页。您将会看到,我使用的就是技巧 1 中讨论的理念,从一个存储过程返回两个结果集:记录的总数和请求的数据。
返回记录的总数可能会根据所执行查询的不同而有所变化。例如,WHERE 子句可用来约束返回的数据。为了计算在分页 UI 中显示的总页数,必须了解要返回记录的总数。例如,如果总共有 1,000,000 条记录,并且要使用一个 WHERE 子句将其筛选为 1000 条记录,那么分页逻辑就需要了解记录的总数才能正确呈现分页 UI。
返回页首
技巧 3 — 连接池
在 Web 应用程序和 SQL Server? 之间设置 TCP 连接可能是一个非常消耗资源的操作。Microsoft 的开发人员到目前为止能够使用连接池已经有一段时间了,这使得他们能够重用数据库连接。他们不是针对每个请求都设置一个新的 TCP 连接,而是只在连接池中没有任何连接时才设置新连接。当连接关闭时,它会返回连接池,在其中它会保持与数据库的连接,而不是完全破坏该 TCP 连接。
当然,您需要小心是否会出现泄漏连接。当您完成使用连接时,请一定要关闭这些连接。再重复一遍:无论任何人对 Microsoft?.NET Framework 中的垃圾回收有什么评论,请一定要在完成使用连接时针对该连接显式调用 Close 或 Dispose。不要相信公共语言运行库 (CLR) 会在预先确定的时间为您清除和关闭连接。尽管 CLR 最终会破坏该类,并强制连接关闭,但是当针对对象的垃圾回收真正发生时,并不能保证。
要以最优化的方式使用连接池,需要遵守一些规则。首先打开连接,执行操作,然后关闭该连接。如果您必须如此的话,可以针对每个请求多次打开和关闭连接(最好应用技巧 1),但是不要一直将连接保持打开状态并使用各种不同的方法对其进行进出传递。第二,使用相同的连接字符串(如果使用集成身份验证的话,还要使用相同的线程标识)。如果不使用相同的连接字符串,例如根据登录的用户自定义连接字符串,那么您将无法得到连接池提供的同一个优化值。如果您使用集成身份验证,同时还要模拟大量用户,连接池的效率也会大大下降。尝试跟踪与连接池相关的任何性能问题时,.NET CLR 数据性能计数器可能非常有用。 - 上一页 [1] [2] [3] [4] [5] [6] 下一页
-
- 编写高性能 Web 应用程序的 10 个技巧 相关文章:
- ·Java编写的计算器程序及源代码(1)
- ·C#编写的windows计算器-源代码
- ·Windows下C语言网络编程快速入门
- ·VBA编程简化Excel操作的两个实例
- ·ASP.NET2.0下含有DropDownList的GridView编辑、删除的完整例子!
- ·Windows编程基础 - 概述
- ·深入浅出.NET泛型编程
- ·WINDOWS编程基础
- ·linux内核编译详解
- ·剪辑数字影像 影像编辑软件大荟萃
- 编写高性能 Web 应用程序的 10 个技巧 相关软件
- ·C语言编程宝典之一
- ·《雅奇MIS》可视化自动编程系统 V10.0
- ·MathType 数学公式编辑器 V5.2 汉化版
- ·delphi编程手册 V3.0
- ·Lrc歌词编辑器2006 V12.26
- ·Autop+线切割编程系统 V4.47
- ·vc-mfc编程实例
- ·姑妄言汇编
- ·ICO图标提取编辑专家 V4.7
- ·JP-Word简谱编辑 V3.0
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:四篇IIS的中级技巧
下一篇:中国是谁的天堂?一个牛人的牛话
精品推荐
热点TOP10
- ·1394网络适配器是什么东西?
- ·知道对方的ip地址,如何查具体物理地址?
- ·arp.exe是什么
- ·XSL/XML网页制作入门,入门到精通
- ·素材网站、优秀设计素材大全
- ·初学者入门:如何学习网页制作?
- ·jsp Smart Upload上传下载全攻略
- ·常用网页使用js技巧收集(200多个)
- ·WINDOWS编程基础
- ·为什么打开网页那么慢?
- ·请问如何查出我被人限制网速~~~
- ·常见弹出代码集合
- ·制作网站的步骤和方法
- ·网页版面设计
- ·站长常用广告代码的表达大全(不断更新中,希望收藏本页)
- ·网页对联广告代码大全
- ·ADSL登录是错误,出现691是什么意思
- ·手把手教你做网站必备的六步
- ·怎么样才能访问到局域网其他的机器
- ·求一款免费制造网页的软件!
特别推荐
- ·常见弹出代码集合
- ·国内外cms网站大全
- ·CSDN 总结 精华 ASP 代码
- ·编写高性能 Web 应用程序的 10 个技巧
- ·制作网页需要学习哪些技术?
- ·再次举例熟悉网页的头部信息表示涵义
- ·英文版本的cms大全
- ·ASP.NET中应用XML技术实现Web报表打印
- ·web标准常见问题大集合
- ·mssql数据库操作手册-全是精髓
- ·怎么让网页插入FLASH居中显示啊?代码!
- ·推荐FTP软件LeapFTP使用教程
- ·ADSL登录是错误,出现691是什么意思
- ·初学者入门:如何学习网页制作?
- ·ADSL宽带LINK灯闪
- ·jsp Smart Upload上传下载全攻略
- ·怎么样才能访问到局域网其他的机器
- ·服务器安装Zend Optimizer的方法
- ·信了你的邪-阿彪就能装上iis组件
- ·手把手教你做网站必备的六步
