asp 性能测试报告 学习asp朋友需要了解的东西(3)
来源:asp之家 发布时间:2011-03-09 10:57:00
三、第一次测试
在第一次测试中,我们模拟Microsoft ASP ADO示例中可找到的典型情形提取一个记录集。在这个例子(ADO__01.asp)中,我们首先打开一个连接,然后创建记录集对象。当然,这里的脚本按照本文第一部分所总结的编码规则作了优化。
代码如下:
<% Option Explicit %>
<!-- #Include file="ADOVBS.INC" -->
<%
Dim objConn
Dim objRS
Response.Write( _
"<HTML><HEAD>" & _
"<TITLE>ADO Test</TITLE>" & _
"</HEAD><BODY>" _
)
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open Application("Conn")
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.ActiveConnection = objConn
objRS.CursorType = adOpenForwardOnly
objRS.LockType = adLockReadOnly
objRS.Open Application("SQL")
If objRS.EOF Then
Response.Write("No Records Found")
Else
'write headings
Response.Write( _
"<TABLE BORDER=1>" & _
"<TR>" & _
"<TH>OrderID</TH>" & _
"<TH>CustomerID</TH>" & _
"<TH>EmployeeID</TH>" & _
"<TH>OrderDate</TH>" & _
"<TH>RequiredDate</TH>" & _
"<TH>ShippedDate</TH>" & _
"<TH>Freight</TH>" & _
"</TR>" _
)
'write data
Do While Not objRS.EOF
Response.Write( _
"<TR>" & _
"<TD>" & objRS("OrderID") & "</TD>" & _
"<TD>" & objRS("CustomerID") & "</TD>" & _
"<TD>" & objRS("EmployeeID") & "</TD>" & _
"<TD>" & objRS("OrderDate") & "</TD>" & _
"<TD>" & objRS("RequiredDate") & "</TD>" & _
"<TD>" & objRS("ShippedDate") & "</TD>" & _
"<TD>" & objRS("Freight") & "</TD>" & _
"</TR> " _
)
objRS.MoveNext
Loop
Response.Write("</TABLE>")
End If
objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing
Response.Write("</BODY></HTML>")
%>
下面是测试结果:
我们来看一下各栏数字的含义:
0返回0个记录的页面所需要的TTLB(毫秒)。在所有的测试中,该值被视为生成页面本身(包括创建对象)的时间开销,不包含循环访问记录集数据的时间。
25以毫秒计的提取和显示25个记录的TTLB
tot time/25"25"栏的TTLB除以25,它是每个记录的总计平均时间开销。
disp time/25"25"栏的TTLB减去"0"栏的TTLB,然后除以25。该值反映了在循环记录集时显示单个记录所需时间。
250提取和显示250个记录的TTLB。
tot time/250"250"栏的TTLB除以25,该值代表单个记录的总计平均时间开销。
disp time/250"250"栏的TTLB减去"0"栏的TTLB,再除以250。该值反映了在循环记录集时显示单个记录所需时间。
上面的测试结果将用来同下一个测试结果比较。
四、是否应该通过包含引用ADOVBS.inc?
Microsoft提供的ADOVBS.inc包含了270行代码,这些代码定义了大多数的ADO属性常量。我们这个示例只从ADOVBS.inc引用了2个常量。因此本次测试(ADO__02.asp)中我们删除了包含文件引用,设置属性时直接使用相应的数值。
objRS.CursorType = 0?' adOpenForwardOnly
objRS.LockType = 1' adLockReadOnly
可以看到页面开销下降了23%。该值并不影响单个记录的提取和显示时间,因为这里的变化不会影响循环内的记录集操作。有多种方法可以解决ADOVBS.inc的引用问题。我们建议将ADOVBS.inc文件作为参考,设置时通过注释加以说明。请记住,正如第一部分所指出的,适度地运用注释对代码的效率影响极小。另外一种方法是将那些需要用到的常量从ADOVBS.inc文件拷贝到页面内。
还有一个解决该问题的好方法,这就是通过链接ADO类型库使得所有的ADO常量直接可用。把下面的代码加入Global.asa文件,即可直接访问所有的ADO常量:
<!--METADATA TYPE="typelib"
FILE="C:Program FilesCommon FilesSYSTEMADOmsado15.dll"
NAME="ADODB Type Library" -->
或者:
<!--METADATA TYPE="typelib"
UUID="00000205-0000-0010-8000-00AA006D2EA4"
NAME="ADODB Type Library" -->
因此,我们的第一条规则为:
l避免包含ADOVBS.inc文件,通过其他方法访问和使用ADO常量。
五、使用记录集时是否应该创建单独的连接对象?
要正确地回答这个问题,我们必须分析两种不同条件下的测试:第一,页面只有一个数据库事务;第二,页面有多个数据库事务。
在前例中,我们创建了一个单独的Connection对象并将它赋给Recordset的ActiveConnection属性。然而,如ADO__03.asp所示,我们也可以直接把连接串赋给ActiveConnection属性,在脚本中初始化和配置Connection对象这一额外的步骤可以省去。
objRS.ActiveConnection = Application("Conn")
虽然Recordset对象仍旧要创建一个连接,但此时的创建是在高度优化的条件下进行的。因此,与上一次测试相比,页面开销又下降了23%,而且如预期的一样,单个记录的显示时间没有实质的变化。
因此,我们的第二个规则如下:
l如果只使用一个记录集,直接把连接串赋给ActiveConnection属性。


猜你喜欢
- 分组小括号() 有直接分组和命名分组直接分组: ()分组只显示小括号括起来的内容re.findall(r"(name)+
- 一、作业需求 二、流程图三、源码与具体思路 import shutilimport osimport sysUSER_LOGIN
- //方法1:$ip = $_SERVER["REMOTE_ADDR"];echo $ip;//方法2:$user_IP
- 【简 介】熟悉网页设计的网友就知道,调用Style的方法很多,我们可以单击鼠标右键选择Custon Style来调用Style标准,也可以在
- clear()方法将删除字典中的所有项目(清空字典)语法以下是clear()方法的语法:dict.clear()参数
- MySQL超长字符截断又名"SQL-Column-Truncation",是安全研究者Stefan Esser在2008
- np.newaxis 新增一个轴 如何将数组[0,1,2]转换成列向量用ndarray[: , np.newaxis]代码实质就是将原本的(
- 利用PHP中的thinkphp5进行项目开发,将view一道项目跟目录下进入到/www/wwwroot/xxxx/application/c
- 1、目标场景用过Mac OS的朋友应该都遇到过,日常的文件操作会在同级目录下产生一些特定的临时文件。平常将文件夹打包成压缩包或拷贝文件夹到移
- Python爬虫包 BeautifulSoup 递归抓取实例详解概要:爬虫的主要目的就是为了沿着网络抓取需要的内容。它们的本质是
- 前言最近找几个老友准备聊天发现几个已经被删除好友名单,做为潜水党多年的我已经不知道成为多少人的黑名单,但是好友列表却依然有不是好友的名单,面
- python安装pywifi1.Windows安装:在Dos窗口中输入以下命令:pip install pywifi如果找不到pip命令,那
- 一、如果是刚刚删除,那么有两方法:首先用show parameter undo;命令查看当时的数据库参数undo_retention设置。显
- 可以使用条件断点,如图,在断点上右键可以设置,条件自己输入,python语法:来源:https://blog.csdn.net/daijig
- Django的ORM是非常好用的,哪怕不是做Web项目也值得一用,所以网上也可以找到不少使用 Django 开发非Web项目的资料,因为除了
- k近邻算法的介绍k近邻算法是一种基本的分类和回归方法,这里只实现分类的k近邻算法。k近邻算法的输入为实例的特征向量,对应特征空间的点;输出为
- golang的字符有如下两种:一种是 uint8['ju:nɪt] 类型叫做 byte 型,代表了 ASCII 码的一个字符。另一种
- demo.py(装饰器,带参数的装饰器):def set_level(level_num): def set_func(func
- 一、使用SQL Server全文搜索配置要使用SQL Server的全文搜索服务,需要进行如下配置。1、开启全文搜索服务:2、开启数据库的全
- 自定义比较排序/运算符Python3和Python2相比有挺多变化。在Python2中可以直接写一个cmp函数作为参数传入sort来自定义排