一直聽說asp比其他語言的效率低,其實(shí)不然,效率低只是程序人員在開發(fā)的過程中的方法效率低而已,這與語言效率低沒有關(guān)系。
在實(shí)際開發(fā)過程中,我發(fā)現(xiàn)asp一個(gè)效率低的地方,就是&連接符的效率低,但我們換個(gè)方法,也可以直接提高它的效率。我們比較一下下面的兩種方法:
<%
class strCat
Private index, ub, ar()
Private Sub Class_Initialize()
'statements
redim ar(50)
index=0
ub=10
End Sub
Private Sub Class_Terminate()
'statements
erase ar
End Sub
public default Sub Add(value)
ar(index)=value
index=index+1
if index>ub then
ub=ub+50
redim preserve ar(ub)
end if
end sub
public Function display
redim preserve ar(index-1)
display=join(ar,"")
end function
end class
'方法一:使用&連接符
t1=timer
os=""
for i=1 to 10000
os=os & "www.aspbc.com"&i&" "
next
s=os
t2=timer
response.Write("<br>Using the fast string class: " &t2-t1 & "<hr>")
'方法二:使用自定義的類
t3=timer
set cat= new strCat
for i=1 to 10000
cat("www.aspbc.com")
next
s= cat.display
set cat = nothing
t4=timer
response.Write("<br>Using the fast string class: " &t4-t3 & "<hr>")
%>
- '下面僅列出主要代碼。[讀取SQL結(jié)果到二維數(shù)組 UserInfo 中略]
- 'UserInfo = 0 ID,1 SV_ID,2 RECORD,3 Province,4 City,5 Name,6 Sex,7 Address,8 PostCode,9 Phone,10 OtherInfo,11 UserName,12 IP,13 DateTime
- Dim OutputText '輸出文本內(nèi)容
- Dim SurveyInfo '調(diào)查基本信息
- Dim TempItemText '臨時(shí)中間字符串連接變量(*關(guān)鍵)
- '.
- For i=0 To UBound(UserInfo,2)
- TempItemText = TempItemText & (VbCrLf & "姓名:" & UserInfo(5,i) & VbCrLf & _
- "省份:" & UserInfo(3,i) & " 城市:" & UserInfo(4,i) & VbCrLf & _
- "聯(lián)系地址:" & UserInfo(7,i) & " 郵編:" & UserInfo(8,i) & VbCrLf & _
- "電話:" & UserInfo(9,i) & VbCrLf)
-
- ' [OtherInfo 用戶其他資料特殊資料的處理,與上面相同需要 0 次 OutputText連接 代碼略]
- TempItemText = TempItemText & ("IP:" & UserInfo(12,i) & " Time:" & UserInfo(13,i) & VbCrLf & _
- "------------------------------------------------------------" & VbCrLf)
- '減少10倍大字符串連接
- If ((i+1) Mod 10) =0 Then
- OutputText = OutputText & TempItemText
- TempItemText = ""
- End If
- Next
- If TempItemText<>"" Then
- OutputText = OutputText & TempItemText
- End If
可以看出代碼增加了一個(gè)中間變量TempItemText用來連接每個(gè)用戶資料,直接減少OutputText連接3倍。又通過 i 于 10取余數(shù),大約每10個(gè)用戶資料連接一次OutputText,再次減少10倍。Next后增加一個(gè)代碼對(duì)最后可能的<10個(gè)用戶的資料進(jìn)行次 OutputText連接。總共優(yōu)化15次OutputText連接。
至此在沒有使用StringBuilder的情況下,將程序優(yōu)化到0.7s,已能滿足項(xiàng)目要求。
總結(jié):一、利用表達(dá)式優(yōu)先級(jí)減少對(duì)大字符串連接次數(shù)。(僅增加一對(duì)括號(hào),對(duì)原代碼的影響很少*推薦)
二、利用小字符串做中間變量減少對(duì)大字符串連接次數(shù)。
三、這個(gè)優(yōu)化方法適用范圍不局限在ASP中(C#等)。