效能 十一、用臨時字串收集輸出是一種好方法嗎?
這個問題來自對本人最近一篇文章的建議。問題的核心是緩衝的使用,以及是否可以使用臨時字串收集Response.Write的輸出,從而使得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函數並不象有些人建議的那樣工作。我們得到的最後一個規則為:
不要使用臨時字串收集輸出。