欢迎光临
我们一直在努力

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

建站超值云服务器,限时71元/月

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

   在前例中,我们创建了一个单独的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属性共享它。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » asp性能测试第二部分(转)(五)
分享到: 更多 (0)

相关推荐

  • 暂无文章