asp性能测试第二部分(转)(一)

性能

一、测试目的
   编译如下:

   本文的第一部分考察了ASP开发中的一些基本问题,给出了一些性能测试结果以帮助读者理解放入页面的代码到底对性能有什么影响。ADO是由Microsoft开发的一个通用、易用的数据库接口,事实证明通过ADO与数据库交互是ASP最重要的应用之一,在第二部分中,我们就来研究这个问题。

   ADO所提供的功能相当广泛,因此准备本文最大的困难在于如何界定问题的范围。考虑到提取大量的数据可能显著地增加Web服务器的负载,所以我们决定这一部分的主要目的是找出什么才是操作ADO记录集的最优配置。然而,即使缩小了问题的范围,我们仍旧面临很大的困难,因为ADO可以有许多种不同的方法来完成同一个任务。例如,记录集不仅可以通过Recordset类提取,而且也可以通过Connection和Command类提取;即使得到记录集对象之后,还有许多可能戏剧性地影响性能的操作方法。然而,与第一部分一样,我们将尽可能地涵盖最广泛的问题。

   具体地讲,这一部分的目标是收集足够多的信息,回答下列问题:

是否应该通过包含引用ADOVBS.inc?
使用记录集时是否应该创建单独的连接对象?
最好用哪种方法提取记录集?
哪种游标类型和记录锁定方式效率最高?
是否应该使用本地记录集?
设置记录集属性用哪种方法最好?
用哪种方法引用记录集字段值效率最高?
用临时字符串收集输出是一种好方法吗?

时间: 2024-12-21 20:52:42

asp性能测试第二部分(转)(一)的相关文章

asp性能测试第二部分(转)(八)

性能 八.是否应该使用本地记录集? ADO允许使用本地(客户端)记录集,此时查询将提取记录集内的所有数据,查询完成后连接可以立即关闭,以后使用本地的游标访问数据,这为释放连接带来了方便.使用本地记录集对于访问那些要求数据离线使用的远程数据服务非常重要,那么,对于普通的应用它是否同样有所帮助? 下面我们加入CursorLocation属性,并在打开记录集之后关闭了连接(CLIENT1.asp): Set objRS = Server.CreateObject("ADODB.Recordset&qu

asp性能测试第二部分(转)(十二)

性能 十二.总结下面是我们在这第二部分中得到的规则: 避免包含ADOVBS.inc文件,通过其他方法访问和使用ADO常量. 如果只使用一个记录集,直接把连接串赋给ActiveConnection属性. 同一页面内用到多个记录集时,创建单一的连接对象并通过ActiveConnection属性共享它. 使用适合于处理任务的最简单的游标类型和记录锁定方式. 通过ADODB.Recordset类实例化记录集,以获得最好的性能和灵活性. 不必在乎是否单独地设置Recordset的属性. 除非确实要求记录集

asp性能测试第二部分(转)(五)

五.使用记录集时是否应该创建单独的连接对象? 要正确地回答这个问题,我们必须分析两种不同条件下的测试:第一,页面只有一个数据库事务:第二,页面有多个数据库事务. 在前例中,我们创建了一个单独的Connection对象并将它赋给Recordset的ActiveConnection属性.然而,如ADO__03.asp所示,我们也可以直接把连接串赋给ActiveConnection属性,在脚本中初始化和配置Connection对象这一额外的步骤可以省去.objRS.ActiveConnection =

asp性能测试第二部分(转)(十一)

性能 十一.用临时字符串收集输出是一种好方法吗? 这个问题来自对本人最近一篇文章的建议.问题的核心是缓冲的使用,以及是否可以使用临时字符串收集Response.Write的输出,从而使得Response.Write只需调用一次即可.为测试这个问题,我们修改了ADO_11.asp,在循环中不是每次都用Response.Write输出,而是把输出附加到一个字符串的末尾,在全部记录处理完毕后调用Response.Write输出这个字符串(STR__01.asp): Dim strTablestrTab

asp性能测试第二部分(转)(九)

性能 九.设置记录集属性用哪种方法最好?前面的所有测试均采用了直接设置Recordset各个属性的方法.不过,Recordset.open函数允许为所有必须设置的属性指定相应的参数.每个属性都用单独的代码行设置虽然易于阅读和维护,但每行代码都会增加一个COM对象的方法调用(ADO__07.asp). Set objRS = Server.CreateObject("ADODB.Recordset")objRS.Open Application("SQL"), App

asp性能测试第二部分(转)(七)

性能 七.最好用哪种方法提取记录集? 到目前为止我们一直通过创建Recordset对象提取记录集,但是ADO也提供了间接的记录集提取方法.下面的测试比较ADO__03.asp和直接从Connection对象创建记录集(CONN_01.asp)这两种方法: Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open Application("Conn") Set objRS = objConn.

asp性能测试第二部分(转)(二)

性能 二.测试环境 本测试总共用到了21个ASP文件,这些文件可以从本文后面下载.每一个页面设置成可以运行三种不同的查询,分别返回0.25.250个记录.这将帮助我们隔离页面本身的初始化.运行开销与用循环访问记录集的开销. 为便于测试,数据库连接字符串和SQL命令串都在Global.asa中作为Application变量保存.由于我们的测试数据库是SQL Server 7.0,因此连接串指定OLEDB作为连接提供者,测试数据来自SQL Server的Northwind数据库.SQL SELECT

asp性能测试第二部分(转)(十)

性能 十.用哪种方法引用记录集字段值效率最高? 10.1 测试 至此为止我们一直通过名字引用记录集中的字段值.由于这种方法要求每次都必须寻找相应的字段,它的效率并不高.为证明这一点,下面这个测试中我们通过字段在集合中的索引引用它的值(ADO__08.asp):   'write data   Do While Not objRS.EOF       Response.Write( _         "< TR >" & _         "< T

asp性能测试第二部分(转)(四)

性能 四.是否应该通过包含引用ADOVBS.inc? Microsoft提供的ADOVBS.inc包含了270行代码,这些代码定义了大多数的ADO属性常量.我们这个示例只从ADOVBS.inc引用了2个常量.因此本次测试(ADO__02.asp)中我们删除了包含文件引用,设置属性时直接使用相应的数值. objRS.CursorType = 0     ' adOpenForwardOnlyobjRS.LockType = 1       ' adLockReadOnly    可以看到页面开销下