2006-10-31

编写高性能Web应用程序的10个入门技巧

来源: 本站收集整理 作者:佚名 评论 0 条
 
符串操作),则请停止,然后执行这个试纸性测试。假如您的性能问题不是非常严重的话
,最好花一些时间来优化一下与数据库、返回的数据量、进出数据库的往返频率相关的花
费时间。

了解这些常规信息之后,我们来看一下可能会有助于提高应用程序性能的十个技巧。首先
,我要讲述可能会引起最大改观的更改。


技巧 1 — 返回多个结果集


仔细查看您的数据库代码,看是否存在多次进入数据库的请求路径。每个这样的往返都会
降低应用程序可以提供的每秒请求数量。通过在一个数据库请求中返回多个结果集,可以
节省与数据库进行通信所需的总时间长度。同时因为减少了数据库服务器治理请求的工作
,还会使得系统伸缩性更强。

虽然可以使用动态 SQL 返回多个结果集,但是我首选使用存储过程。关于业务逻辑是否应
该驻留于存储过程的问题还存在一些争议,但是我认为,假如存储过程中的逻辑可以约束
返回数据的话(缩小数据集的大小、缩短网络上所花费时间,不必筛选逻辑层的数据),
则应赞成这样做。

使用 SqlCommand 实例及其 ExecuteReader 方法填充强类型的业务类时,可以通过调用
NextResult 将结果集指针向前移动。图 1 显示了使用类型类填充几个 ArrayList 的示例
会话。只从数据库返回您需要的数据将进一步减少服务器上的内存分配。

Figure 1 Extracting Multiple Resultsets from a DataReader
// read the first resultset
reader = command.ExecuteReader();

// read the data from that resultset
while (reader.Read()) {
suppliers.Add(PopulateSupplierFromIDataReader( reader ));
}

// read the next resultset
reader.NextResult();

// read the data from that second resultset
while (reader.Read()) {
products.Add(PopulateProductFromIDataReader( reader ));
}


技巧 2 — 分页的数据访问


ASP.NET DataGrid 具有一个很好的功能:数据分页支持。在 DataGrid 中启用分页时,一
次会显示固定数量的记录。另外,在 DataGrid 的底部还会显示分页 UI,以便在记录之间
进行导航。该分页 UI 使您能够在所显示的数据之间向前和向后导航,并且一次显示固定
数量的记录。

还有一个小小的波折。使用 DataGrid 的分页需要所有数据均与网格进行绑定。例如,您
的数据层需要返回所有数据,那么 DataGrid 就会基于当前页筛选显示的所有记录。假如
通过 DataGrid 进行分页时返回了 100,000 个记录,那么针对每个请求会放弃 99,975 个
记录(假设每页大小为 25 个记录)。当记录的数量不断增加时,应用程序的性能就会受
到影响,因为针对每个请求必须发送越来越多的数据。

要编写性能更好的分页代码,一个极佳的方式是使用存储过程。图 2 显示了针对
Northwind 数据库中的 Orders 表进行分页的一个示例存储过程。简而言之,您此时要做
的只是传递页索引和页大小。然后就会计算合适的结果集,并将其返回。

Figure 2 Paging Through the Orders Table
CREATE PROCEDURE northwind_OrdersPaged
(
@PageIndex int,
@PageSize int
)
AS
BEGIN
DECLARE @PageLowerBound int
DECLARE @PageUpperBound int
DECLARE @RowsToReturn int

-- First set the rowcount
SET @RowsToReturn = @PageSize * (@PageIndex 1)
SET ROWCOUNT @RowsToReturn

-- Set the page bounds
共4页: 上一页 [1] 2 [3] [4] 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:精华推荐:从Caché看后关系型数据库  
下一篇:精华:关于数据库的权限设置深入剖析
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号