动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   Asp → 阅读文章

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

作者来源: 
阅读 2233 人次 , 2000-8-1 

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

   在前例中,我们创建了一个单独的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属性共享它。   
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:asp性能测试第二部分(转)(六)
· 下一篇:asp性能测试第二部分(转)(四)
· 检查有日文片假名的新闻
· 如何让你的ASP运行于非Windows平台 - 3
· 在你的ASP中使用类(class) 
· 检查Email地址的比较完善的正则表达式函数
· 如何解决“Server is too busy”问题的一些建议


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077