网络编程
位置:首页>> 网络编程>> Asp编程>> asp 性能测试报告 学习asp朋友需要了解的东西(7)

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

 来源:asp之家 发布时间:2011-03-09 10:57:00 

标签: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)。

代码如下:

If objRS.EOF Then 
Response.Write("No Records Found") 
objRS.Close 
Set objRS = Nothing 
Else 
'write headings 
... 

'set array 
Dim arrRS 
arrRS = objRS.GetRows 
'close recordset early 
objRS.Close 
Set objRS = Nothing 

'write data 
Dim numRows 
Dim numFlds 
Dim row 
Dim fld 
numFlds = Ubound(arrRS, 1) 
numRows = Ubound(arrRS, 2) 
For row= 0 to numRows 
Response.Write("<TR>") 
For fld = 0 to numFlds 
Response.Write("<TD>" & arrRS(fld, row) & "</TD>") 
Next 
Response.Write("</TR>") 
Next 

Response.Write("</TABLE>") 
End If 

使用GetRows方法时,整个记录集都被提取到了数组。虽然记录集极端庞大时可能产生资源问题,但是用循环访问数据的速度确实更快了,这是由于取消了MoveNext和检查EOF之类的函数调用。

   速度是要付出代价的,现在记录集的元数据已经丢失了。为解决这个问题,我们可以在调用GetRows之前从记录集对象提取标题信息;此外,数据类型和其他信息也可以预先提取。另外还要注意的是,测试中性能上的优势只有在记录集较大的时候才会出现。

   这一组的最后一个测试中,我们使用了记录集的GetString方法。GetString方法将整个记录集提取成为一个大的字符串,并允许指定分隔符(ADO__13.asp):

代码如下:

If objRS.EOF Then 
Response.Write("No Records Found") 
objRS.Close 
Set objRS = Nothing 
Else 
'write headings 
... 
'set array 
Dim strTable 
strTable = objRS.GetString (2, , "</TD><TD>", "</TD></TR><TR><TD>") 
'close recordset early 
objRS.Close 
Set objRS = Nothing 
Response.Write(strTable & "</TD></TR></TABLE>") 
End If 


 

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com