人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統下載站 > 技術開發教程 > 詳細頁面

ASP程序性能測試報告(7)

ASP程序性能測試報告(7)

更新時間:2022-07-12 文章作者:未知 信息來源:網絡 閱讀次數:

十、用哪種方法引用記錄集字段值效率最高?

   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,也就是盡快地釋放了系統資源。另外,請注意數組的第一維代表字段,第二維代表行(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


   雖然這種方法在速度上的好處非常明顯,但它只適用于最簡單的操作,根本無法適應稍微復雜的數據操作要求。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 东乌珠穆沁旗| 凤凰县| 南京市| 黔江区| 达尔| 朔州市| 井陉县| 阿图什市| 石景山区| 松溪县| 山阴县| 烟台市| 凤凰县| 武宁县| 尼玛县| 凤冈县| 阿克苏市| 绥滨县| 东乡族自治县| 沈阳市| 滨海县| 嘉黎县| 诸城市| 垣曲县| 舟山市| 延津县| 张家界市| 南溪县| 兴仁县| 和平区| 江北区| 三明市| 奉贤区| 陇南市| 邢台县| 驻马店市| 沂南县| 平定县| 阿瓦提县| 文登市| 三都|