• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: 小 中 大 | 推荐给好友 上一篇 | 下一篇

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

发布: 2007-6-30 18:56 | 作者: admin | 来源: | 查看: 17次 | 进入软件测试论坛讨论

领测软件测试网 五、使用记录集时是否应该创建单独的连接对象?
   要正确地回答这个问题,我们必须分析两种不同条件下的测试:第一,页面只有一个数据库事务;第二,页面有多个数据库事务。

   在前例中,我们创建了一个单独的Connection对象并将它赋给Recordset的ActiveConnection属性。然而,如ADO__03.asp所示,我们也可以直接把连接串赋给ActiveConnection属性,在脚本中初始化和配置Connection对象这一额外的步骤可以省去。
objRS.ActiveConnection = Application("Conn")

   虽然Recordset对象仍旧要创建一个连接,但此时的创建是在高度优化的条件下进行的。因此,与上一次测试相比,页面开销又下降了23%,而且如预期的一样,单个记录的显示时间没有实质的变化。

   因此,我们的第二个规则如下:

如果只使用一个记录集,直接把连接串赋给ActiveConnection属性。
   接下来我们检查页面用到多个记录集时,上述规则是否仍旧有效。为测试这种情形,我们引入一个FOR循环将前例重复10次。在这个测试中,我们将研究三种变化:

   第一,如ADO__04.asp所示,在每一个循环中建立和拆除Connection对象:
Dim i
For i = 1 to 10

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open Application("Conn")

Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.ActiveConnection = objConn
objRS.CursorType = 0 ‘’adOpenForwardOnly
objRS.LockType = 1 ‘’adLockReadOnly
objRS.Open Application("SQL")

If objRS.EOF Then
Response.Write("No Records Found")
Else
‘’write headings
...
‘’write data
...
End If

objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing

Next




   第二,如ADO__05.asp所示,在循环外面创建Connection对象,所有记录集共享该对象:
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open Application("Conn")

Dim i
For i = 1 to 10
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.ActiveConnection = objConn
objRS.CursorType = 0 ‘’adOpenForwardOnly
objRS.LockType = 1 ‘’adLockReadOnly
objRS.Open Application("SQL")

If objRS.EOF Then
Response.Write("No Records Found")
Else
‘’write headings
...
‘’write data
...
End If

objRS.Close
Set objRS = Nothing

Next
objConn.Close
Set objConn = Nothing

   第三,如ADO__06.asp所示,在每一个循环内把连接串赋给ActiveConnection属性:
Dim i
For i = 1 to 10

Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.ActiveConnection = Application("Conn")
objRS.CursorType = 0 ‘’adOpenForwardOnly
objRS.LockType = 1 ‘’adLockReadOnly
objRS.Open Application("SQL")

If objRS.EOF Then
Response.Write("No Records Found")
Else
‘’write headings
...
‘’write data
...
End If

objRS.Close
Set objRS = Nothing
Next      

   就象我们可以猜想到的一样,在循环内创建和拆除连接对象是效率最差的方法。不过,令人惊异的是,在循环内直接把连接串赋给ActiveConnection属性只比共享单个连接对象稍微慢了一点。

   尽管如此,第三规则应该为:

同一页面内用到多个记录集时,创建单一的连接对象并通过ActiveConnection属性共享它。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:[email protected] 电话:010-51297073

软件测试 | 领测国际 | ISTQB | ISTQB官网 | TMMi | TMMi认证 | 国际软件测试工程师认证 | 领测软件测试网