asp 性能测试报告 学习asp朋友需要了解的东西(5)
来源:asp之家 发布时间:2011-03-09 10:57:00
尽管如此,第三规则应该为:
l同一页面内用到多个记录集时,创建单一的连接对象并通过ActiveConnection属性共享它。
六、哪种游标类型和记录锁定方式效率最高?
迄今为止的所有测试中我们只使用了“只能向前”的游标来访问记录集。ADO为记录集提供的游标还有三种类型:静态可滚动的游标,动态可滚动的游标,键集游标。每种游标都提供不同的功能,比如访问前一记录和后一记录、是否可以看到其他程序对数据的修改等。不过,具体讨论每一种游标类型的功用已经超出了本文的范围,下表是各种游标类型的一个比较性的分析。
和“只能向前”类型的游标相比,所有其它的游标类型都需要额外的开销,而且这些游标在循环内一般也要慢一些。因此,我们愿与您共享如下告诫:永远不要这样认为——“唔,有时候我会用到动态游标,那么我就一直使用这种游标吧。”
同样的看法也适用于记录锁定方式的选择。前面的测试只用到了只读的加锁方式,但还存在其他三种方式:保守式、开放式、开放式批处理方式。和游标类型一样,这些锁定方式为处理记录集数据提供了不同的功能和控制能力。
我们得出如下规则:
l使用适合于处理任务的最简单的游标类型和记录锁定方式。
七、最好用哪种方法提取记录集?
到目前为止我们一直通过创建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类创建记录集时,我们能够以最大的灵活性控制记录集的处理方式。既然后面两种方法未能有压倒性的性能表现,我们主要还是考虑默认返回的游标类型和记录锁定方式,对于某些场合来说默认值并不一定是最理想的。
因此,除非由于特殊的原因需要选择后面两种方法,否则我们建议考虑下面的规则:
l通过ADODB.Recordset类实例化记录集,以获得最好的性能和灵活性。
八、是否应该使用本地记录集?
ADO允许使用本地(客户端)记录集,此时查询将提取记录集内的所有数据,查询完成后连接可以立即关闭,以后使用本地的游标访问数据,这为释放连接带来了方便。使用本地记录集对于访问那些要求数据离线使用的远程数据服务非常重要,那么,对于普通的应用它是否同样有所帮助?
下面我们加入CursorLocation属性,并在打开记录集之后关闭了连接(CLIENT1.asp):
代码如下:
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CursorLocation = 2' adUseClient
objRS.ActiveConnection = Application("Conn")
objRS.LockType = 1?' adLockReadOnly
objRS.Open Application("SQL")
objRS.ActiveConnection = Nothing
理论上,这种方法由于以下两个原因会对效率有所好处:第一,它避免了在记录之间移动时重复地通过连接请求数据;第二,由于能够方便地释放连接,它减轻了资源需求。然而,从上表看起来使用本地记录集对提高效率显然没有什么帮助。这或许是因为使用本地记录集时,不管程序设置的是什么,游标总是变成静态类型。


猜你喜欢
- 上次说到的,使用如下代码保存矢量图时,放在外侧的图例往往显示不完整:import numpy as npimport matplotlib.
- #-*- coding: utf-8 -*-import datetime#给定日期向后N天的日期def dateadd_day(days)
- 单表的唯一查询用:distinct多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效,在
- 上次的故事是这样的前女友发来加密的"520快乐.pdf",我用python破解开之后,却发现...事情是这样的小哥哥还是
- 本节描述openGauss数据库在虚拟机VirtualBox+openEuler上的安装配置。1、虚拟机VirtualBox下载及安装步骤
- 前言k-means算法是无监督的聚类算法,实现起来较为简单,k-means++可以理解为k-means的增强版,在初始化中心点的方式上比k-
- global 标识用于在函数内部,修改全局变量的值。我们可以通过以下规则,来判定一个变量到底是在全局作用域还是局部作用域:变量定义在全局作用
- 前言:最近工作上遇到个问题,项目开发过程中,开发代码可以通过svn来版本控制,但数据库又该如何来管理呢?多个人接触数据库,当对表、字段或数据
- 需求:对方提供处理文件的接口,本地将待处理文件压缩后,通过http post multipart方式上传,等待处理完成后从相应连接下载结果代
- 这篇文章主要介绍了基于python3实现倒叙字符串,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 一、算术运算符算术运算符是大部分情况下是实现对数值的运算,少部分可以实现对字符的操作运算符符号描述+加(可对字符进行拼接操作)-减*乘(可对
- views.py 视图文件 message = None all_message = UserMessage.obj
- 每天换一个壁纸,每天好心情。# -*- coding: UTF-8 -*- from __future__ import unicode_l
- 注:所有文字,除注明网站类型外,其他均针对企业站点.请随时注意留言,若修改则会在首页提示文字里标注.若牵扯到业务方面的问题,我可能不会做过多
- 目录1、SKlearn 是什么2、SKlearn 的安装3、SKlearn 内置数据集测试问题数据集实际问题数据集4、Sklearn 数模笔
- 前言最近在项目中遇到这样一个需求:需要在数据表中检索包含指定内容的结果集,该字段的数据类型为text,存储的内容是json格式,具体表结构如
- python 字符串和日期之间转换 StringAndDate &nb
- 根据一般做法的话,导出部分字段时没有办法生成格式化XML文件,所以导入时就没有办法格式化导入数据。 我想到两点,1.手工修改格式化XML文件
- ERROR 2003:Can't connect to MySQL server on 'localhost' (1
- 无论安装何版本的mysql,在管理工具的服务中启动mysql服务时都会在中途报错。内容为:在 本地计算机 无法启动mysql服务 错误106