什麼才是提高ASP效能的最佳選擇(續三)

來源:互聯網
上載者:User
效能 引用記錄集中域值的最有效方法是什麼?

  到目前為止,我都是用名字引用記錄集中的域值的。這可能是一種效率很低的方法,因為每次調用都需要尋找域。為了證明這一點,下面的測試就要通過記錄集中域的集合的指標來參考網域(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

  到目前,這種方法形成的結果是最好的。每條記錄的顯示時間下降成了.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("< /T



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.