亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

提高ASP性能的最佳選擇(續三)

2019-11-18 20:28:30
字體:
來源:轉載
供稿:網友
引用記錄集中域值的最有效方法是什么?
  到目前為止,我都是用名字引用記錄集中的域值的。這可能是一種效率很低的方法,因為每次調用都需要查找域。為了證明這一點,下面的測試就要通過記錄集中域的集合的指針來引用域(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


  正如我們所預料的,裝載時間的變化很?。ú町惪赡苁怯捎诖a上的輕微減少引起的)。但是這種技術在有效顯示時間上卻帶來了明顯的減少。

  在下面的例子中,我們將給每個域指定一個單獨的變量。這種方法避免了在表格循環內的所有查找( 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("< /TABLE >")

  End If


  雖然它并不比最好值快,但是比前面的幾個例子要快了很多,并且有一個優勢就是能夠動態地表現任何記錄集。

  在下一個測試中,我們將對以前的方案做一個徹底的改變,使用記錄集的GetRows指令創建一個循環用的數組,而不是在記錄集本身進行循環。注意,調用GetRows之后,立刻就將記錄集設置為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 指令。這個方法將整個記錄集提取到一個大的字符串中,允許你指定自己的分隔符( 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


  雖然這種方法已經接近了最高水平,但是它只適合于最簡單的設計,因為它根本就不能應用于數據的特殊情況。

觀察
  在我們開始這套測試之前,執行每條記錄的時間一直在.83 毫秒左右震動。這套測試中的大多數方法都將這個數字減少了一半。雖然有些方法明顯地提供了更快的速度,但是代價是靈活性的降低。

  下面的規則是以重要程度為順序的:

* 當記錄集中的值不需要用一種特殊方式來對待并且能夠格式化為一種統一的格式時,使用GetString方法來提取數據。
* 當你在設計上需要更大的靈活性,但是又不需要用記錄集的元數據進行工作,使用GetRows 方法將數據提取到一個數組中。
* 當你需要設計的靈活性和元數據時,在進入一個數據恢復的循環之前,將你的域約束在本地變量中。避免用名字引用域。
使用臨時字符串可以較好地代替緩沖器嗎?
  這是針對我上一篇文章提交的一些注解所引發的一個小小的離題。要討論的問題是圍繞著緩沖器的使用及使用臨時字符串作為替代來收集輸出,這樣就允許Response.Write 只調用一次。為了測試,我從ADO_11.asp的代碼開始,將結果附加到一個字符串中,而不是在每個循環都調用Response.Write,當整個操作都結束后,在字符串上調用Response.Write ( STR__01.asp ):

  Dim strTable

  strTable = ""

  'write headings

  strTable = strTable & "< TABLE BORDER=1 >< TR >"

  For i = 0 to fldCount-1

  strTable = strTable & "< TH >" & fld(i).name & "< /TH >"

  Next

  strTable = strTable & "< /TR >"

  'write data

  Do While Not objRS.EOF

  strTable = strTable & "< TR >"

  For i = 0 to fldCount-1

  strTable = strTable & "< TD >" & fld(i) & "< /TD >"

  Next

  strTable = strTable & "< /TR >"

  objRS.MoveNext

  Loop

  For i = 0 to fldCount-1

  Set fld(i) = Nothing

  Next

  strTable = strTable & "< /TABLE >"

  Response.Write(strTable)


  看起來執行得不是很好。也許正象許多人建議的,我們應該用Space 指令為這個字符串指定一些空間,這樣它就不需要在循環期間總是為自己重新分配空間( STR__02.asp ):

  Dim strTable

  strTable = Space(10000)


  也許Space 指令并不象建議的那樣工作。我們最后的規則是:不要用臨時字符串來收集輸出。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产亚洲一区二区| 久久视频在线免费观看| 国产日韩中文字幕在线| 日韩精品中文字幕久久臀| 97av在线视频| 色噜噜亚洲精品中文字幕| 久久久这里只有精品视频| 国产在线观看不卡| 亚洲男人天堂视频| 欧美与黑人午夜性猛交久久久| 日韩精品欧美激情| 久久综合久久88| 91免费看片网站| 国产精品久久久久久久一区探花| 国产精品久久久久久av下载红粉| 成人免费观看49www在线观看| 中文欧美在线视频| 一区二区在线视频播放| 日韩视频在线免费观看| 国产精品www色诱视频| 色综合天天综合网国产成人网| 亚洲18私人小影院| 欧美中文字幕在线播放| 九九精品在线视频| 自拍偷拍亚洲一区| 日本一区二区三区在线播放| 欧美夜福利tv在线| 欧美做受高潮电影o| 米奇精品一区二区三区在线观看| 这里精品视频免费| 5566日本婷婷色中文字幕97| 欧洲s码亚洲m码精品一区| 成人久久一区二区| 日韩中文在线观看| 欧美日韩ab片| 日韩有码在线电影| 北条麻妃在线一区二区| 久久久精品影院| 黄色成人av网| 欧美日韩国产成人在线观看| 欧美激情亚洲国产| 欧美一乱一性一交一视频| 久久国产精品久久国产精品| 国产精品ⅴa在线观看h| 国产精品稀缺呦系列在线| 久久国产精品久久久| 91精品国产乱码久久久久久久久| 国产精品欧美风情| 欧美另类交人妖| 7777精品久久久久久| 久久久亚洲欧洲日产国码aⅴ| 亚洲欧美激情精品一区二区| 久久夜精品va视频免费观看| 91精品免费看| 日韩风俗一区 二区| 国产精品视频永久免费播放| 成人在线免费观看视视频| 欧美成人免费va影院高清| 亚洲无亚洲人成网站77777| 91视频国产高清| 久久久久久久久久久人体| 亚洲精品动漫久久久久| 黄色精品在线看| 国产91色在线| 欧美性受xxxx黑人猛交| 色妞色视频一区二区三区四区| 亚洲精品国产电影| 激情成人在线视频| 亚洲国产私拍精品国模在线观看| 久久男人av资源网站| 伦理中文字幕亚洲| 成人免费网站在线观看| 国产精品av免费在线观看| 欧美国产日韩一区二区在线观看| 欧美日韩性视频在线| 中文字幕亚洲综合久久| 国内精品免费午夜毛片| 亚洲色图50p| 久久好看免费视频| 欧美一区二区三区图| 国产美女91呻吟求| 一区二区三区美女xx视频| 一区二区欧美日韩视频| 欧美激情一级二级| 国产精品久久久久久久久久久久久久| 伊人激情综合网| 亚洲综合在线小说| 欧美性生交大片免费| 欧美精品在线极品| 欧美精品videosex牲欧美| 国产视频精品在线| 国产精品大片wwwwww| 国产日韩欧美在线视频观看| 91久久久久久久| 久久综合五月天| 亚洲成人在线视频播放| 国产精品国产三级国产专播精品人| 5252色成人免费视频| 国产精品mp4| 欧美国产日韩一区二区在线观看| 成人免费网视频| 久久久女人电视剧免费播放下载| 97视频在线免费观看| 欧美在线观看一区二区三区| 91网站在线免费观看| 亚洲色图五月天| 日韩视频在线免费| 亚洲欧洲一区二区三区在线观看| 欧美老女人性生活| 一区二区三区回区在观看免费视频| 97在线观看免费| 精品亚洲一区二区三区| 8090成年在线看片午夜| 亚洲美女www午夜| 久久精品视频网站| 亚洲一区二区免费| 久久精品这里热有精品| 国语自产在线不卡| 久久精品国产一区| 国产欧美精品一区二区三区-老狼| 日本一区二区在线播放| 亚洲人成电影网站色xx| 久久在线观看视频| 色黄久久久久久| 九九久久综合网站| 麻豆一区二区在线观看| 亚洲三级 欧美三级| 欧美国产精品va在线观看| 欧美性jizz18性欧美| 97在线免费观看视频| 久久影视免费观看| 精品日本高清在线播放| 久久6免费高清热精品| 少妇久久久久久| 成人免费网站在线观看| 亚洲综合视频1区| 国产精品丝袜久久久久久不卡| 18一19gay欧美视频网站| 在线观看亚洲区| 日本亚洲欧美三级| 欧美性高潮床叫视频| 欧美在线欧美在线| 国产ts一区二区| 亚洲第一区在线观看| 亚洲国产欧美一区二区三区同亚洲| 日韩精品免费观看| 欧美精品久久久久久久免费观看| 国产欧美va欧美va香蕉在线| 亚洲91精品在线观看| 欧美日韩在线视频首页| 中文字幕欧美在线| 97视频在线观看播放| 青青在线视频一区二区三区| 国产色婷婷国产综合在线理论片a| 国内精品中文字幕| 亚洲欧美日韩第一区| 亚洲天堂第二页| 国产精品久久久久影院日本| 亚洲欧美制服第一页| 91网站在线看| 欧美性受xxx| 亚洲国产精品va在线| 久久九九全国免费精品观看| 日韩色av导航|