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

性能

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

Set objRS = objConn.Execute(Application("SQL"))

  

   可以看到页面开销略有增加,单个记录的显示时间没有变化。

   下面我们再来看看从Command对象直接创建记录集对象(CMD__02.asp):
Set objCmd = Server.CreateObject("ADODB.Command")
objCmd.ActiveConnection = Application("Conn")
objCmd.CommandText = Application("SQL")

Set objRS = objCmd.Execute

  

   同样,页面开销也略有增加,而单个记录的显示时间没有本质的变化。后面这两种方法在性能上的差异很小,但我们还有一个重要的问题需要考虑。

   通过Recordset类创建记录集时,我们能够以最大的灵活性控制记录集的处理方式。既然后面两种方法未能有压倒性的性能表现,我们主要还是考虑默认返回的游标类型和记录锁定方式,对于某些场合来说默认值并不一定是最理想的。

   因此,除非由于特殊的原因需要选择后面两种方法,否则我们建议考虑下面的规则:

通过ADODB.Recordset类实例化记录集,以获得最好的性能和灵活性。 

时间: 2024-08-02 19:09:54

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

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

性能 一.测试目的 编译如下: 本文的第一部分考察了ASP开发中的一些基本问题,给出了一些性能测试结果以帮助读者理解放入页面的代码到底对性能有什么影响.ADO是由Microsoft开发的一个通用.易用的数据库接口,事实证明通过ADO与数据库交互是ASP最重要的应用之一,在第二部分中,我们就来研究这个问题. ADO所提供的功能相当广泛,因此准备本文最大的困难在于如何界定问题的范围.考虑到提取大量的数据可能显著地增加Web服务器的负载,所以我们决定这一部分的主要目的是找出什么才是操作ADO记录集的最

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性能测试第二部分(转)(二)

性能 二.测试环境 本测试总共用到了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    可以看到页面开销下