大家都知道,&操作符的執(zhí)行速度是相當慢的,特別是處理長字符串時。當必須重復(fù)地在同一變量上附加字符時,有一個基于Mid$命令的技巧可以使用。基本思路就是:預(yù)留一個足夠長的空間存放操作的結(jié)果。下面是應(yīng)用這個技術(shù)的一個例子。
假設(shè)要建立一個字符串,它要附加從1開始的10000個整數(shù):"1 2 3 4 5 6 7 ... 9999
10000"。下面是最簡單的實現(xiàn)代碼:
res = ""
For i = 1 to 10000: res = res & Str(i): Next
代碼雖然簡單,但問題也很明顯:Res變量將被重分配10000次。下面的代碼實現(xiàn)同樣的目的,但效果明顯好轉(zhuǎn):
Dim res As String
Dim i As Long
Dim index As Long
'預(yù)留足夠長的緩沖空間
res = Space(90000)
'指針變量,指出在哪里插入字符串
index = 1
'循環(huán)開始
For i = 1 to 10000
substr = Str(i)
length = Len(substr)
'填充字符串的相應(yīng)區(qū)間段數(shù)值
Mid$(res, index, length) = substr
'調(diào)整指針變量
index = index + length
Next
'刪除多余字符
res = Left$(res, index - 1)
測試表明:在一個333MHz的計算機上,前段代碼執(zhí)行時間為2.2秒,后者僅僅為0.08秒!代碼雖然長了些,可是速度卻提高了25倍之多。呵呵,由此看來:代碼也不可貌相啊
假設(shè)要建立一個字符串,它要附加從1開始的10000個整數(shù):"1 2 3 4 5 6 7 ... 9999
10000"。下面是最簡單的實現(xiàn)代碼:
res = ""
For i = 1 to 10000: res = res & Str(i): Next
代碼雖然簡單,但問題也很明顯:Res變量將被重分配10000次。下面的代碼實現(xiàn)同樣的目的,但效果明顯好轉(zhuǎn):
Dim res As String
Dim i As Long
Dim index As Long
'預(yù)留足夠長的緩沖空間
res = Space(90000)
'指針變量,指出在哪里插入字符串
index = 1
'循環(huán)開始
For i = 1 to 10000
substr = Str(i)
length = Len(substr)
'填充字符串的相應(yīng)區(qū)間段數(shù)值
Mid$(res, index, length) = substr
'調(diào)整指針變量
index = index + length
Next
'刪除多余字符
res = Left$(res, index - 1)
測試表明:在一個333MHz的計算機上,前段代碼執(zhí)行時間為2.2秒,后者僅僅為0.08秒!代碼雖然長了些,可是速度卻提高了25倍之多。呵呵,由此看來:代碼也不可貌相啊

