asp 性能测试报告 学习asp朋友需要了解的东西(10)


"</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,也就是尽快地释放了系统资源。另外,请注意数组的第一维代表字段,第二维代表行(ADO__12.asp)。