我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > ASP专区 > Asp技巧/优化 > ASP程序性能测试报告(七)
热门文章排行
热门文章排行 手推车”功能的实现(10-07)
八大法则防范ASP网站漏洞(10-23)
ASP教程十一、调试ASP脚本(10-23)
在JSP中访问数据库大全(10-23)
虚机服务中常见Asp.Net低级错误一览(03-21)
精采文章排行
精采文章排行 ASP.NET实现抓取网页中的链接(11-15)
ASP连接数据库的11种方法(11-10)
如何动态创建网页的RSS内容摘要(11-10)
ASP网站漏洞及入侵防范方法(11-10)
ASP自定义函数:对字符串正则替换(11-10)
技术专题推荐
网管论坛交流
 

ASP程序性能测试报告(七) 

作者:佚名   来源:本站教程   点击:   日期:2007-03-22

十、用哪种方法引用记录集字段值效率最高?

   10.1 测试

   至此为止我们一直通过名字引用记录集中的字段值。由于这种方法要求每次都必须寻找相应的字段,它的效率并不高。为证明这一点,下面这个测试中我们通过字段在集合中的索引引用它的值(ADO__08.asp):

  'write data
   Do While Not objRS.EOF
      Response.Write( _
         "< TR >" & _
         "< TD >" & objRS(0) & "< /TD >" & _
         "< TD >" & objRS(1) & "< /TD >" & _
         "< TD >" & objRS(2) & "< /TD >" & _
         "< TD >" & objRS(3) & "< /TD >" & _
         "< TD >" & objRS(4) & "< /TD >" & _
         "< TD >" & objRS(5) & "< /TD >" & _
         "< TD >" & objRS(6) & "< /TD >" & _
         "< /TR > " _
      )
      objRS.MoveNext
   Loop


   和预期的一样,页面开销也有小小的变化(这或许是因为代码略有减少)。然而,这种方法在显示时间上的改善是相当明显的。

   在下一个测试中,我们把所有的字段分别绑定到变量(ADO__09.asp):

If objRS.EOF Then
   Response.Write("No Records Found")
Else
   'write headings
   ...
   Dim fld0
   Dim fld1
   Dim fld2
   Dim fld3
   Dim fld4
   Dim fld5
   Dim fld6
   
   Set fld0 = objRS(0)
   Set fld1 = objRS(1)
   Set fld2 = objRS(2)
   Set fld3 = objRS(3)
   Set fld4 = objRS(4)
   Set fld5 = objRS(5)
   Set fld6 = objRS(6)
   
   'write data
   Do While Not objRS.EOF
      Response.Write( _
         "< TR >" & _
         "< TD >" & fld0 & "< /TD >" & _
         "< TD >" & fld1 & "< /TD >" & _
         "< TD >" & fld2 & "< /TD >" & _
         "< TD >" & fld3 & "< /TD >" & _
         "< TD >" & fld4 & "< /TD >" & _
         "< TD >" & fld5 & "< /TD >" & _
         "< TD >" & fld6 & "< /TD >" & _
         "< /TR >" _
      )
      objRS.MoveNext
   Loop
   
   Set fld0 = Nothing
   Set fld1 = Nothing
   Set fld2 = Nothing
   Set fld3 = Nothing
   Set fld4 = Nothing
   Set fld5 = Nothing
   Set fld6 = Nothing
   
   Response.Write("< /TABLE >")
End If

   这是目前为止最好的记录。请注意单个记录的显示时间已经降低到0.45毫秒以下。

   上述脚本都要求对结果记录集的构造有所了解。例如,我们在列标题中直接使用了字段名字,单独地引用各个字段值。下面这个测试中,不仅字段数据通过遍历字段集合得到,而且字段标题也用同样的方式得到,这是一种更为动态的方案(ADO__10.asp)。

If objRS.EOF Then
   Response.Write("No Records Found")
Else
   'write headings   
   Response.Write("< TABLE BORDER=1 >< TR >")
   For Each objFld in objRS.Fields
      Response.Write("< TH >" & objFld.name & "< /TH >")
   Next
   Response.Write("< /TR >")
   
   'write data
   Do While Not objRS.EOF
      Response.Write("< TR >")
      For Each objFld in objRS.Fields
         Response.Write("< TD >" & objFld.value & "< /TD >")
      Next
      Response.Write("< /TR >")
      objRS.MoveNext
   Loop
   Response.Write("< /TABLE >")
End If

   可以看到,代码性能有所下降,但它仍旧要比ADO__07.asp要快。

   下一个测试示例是前面两个方法的折衷。我们将继续保持动态特征,同时通过在动态分配的数组中保存字段引用提高性能:

If objRS.EOF Then
   Response.Write("No Records Found")
Else
   Dim fldCount
   fldCount = objRS.Fields.Count
   Dim fld()
   ReDim fld(fldCount)
   Dim i
   For i = 0 to fldCount-1
      Set fld(i) = objRS(i)
   Next

   'write headings
   Response.Write("< TABLE BORDER=1 >< TR >")   
   For i = 0 to fldCount-1
      Response.Write("< TH >" & fld(i).name & "< /TH >")
   Next
   Response.Write("< /TR >")
      
   'write data
   Do While Not objRS.EOF
      Response.Write("< TR >")
      For i = 0 to fldCount-1
         Response.Write("< TD >" & fld(i) & "< /TD >")
      Next
      Response.Write("< /TR >")
      objRS.MoveNext
   Loop
   
   For i = 0 to fldCount-1
      Set fld(i) = Nothing
   Next
   Response.Write("< /TABLE >")
End If


   虽然还不能超过以前最好的成绩,但它比开头的几个示例要快,同时它具有动态地处理任何记录集这一优点。

   与前面的测试代码相比,下面的测试代码有了根本性的改动。它使用记录集对象的GetRows方法填充数组以供循环访问数据,而不是直接访问记录集本身。注意在调用GetRows之后立即把Recordset设置成了Nothing,也就是尽快地释放了系统资源。另外,请注意数组

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·ASP中巧用Response属性 ·第六课:ASP脚本循环语句
·在 Web 页上使用条件数值格式 ·连接数据库查询手册(不仅仅适用于asp)
·警惕"给你的FileSystemObject对象加把锁" ·用ASP做全文检索

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。