|
こんにちは
文字列の連結ですが、test1とtest2を比較してみて下さい。test2が圧倒的に
速いです。
test1:連結
test2:あらかじめ領域を確保しておき、置換する
Option Explicit
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Private T1 As Long
Private T2 As Long
Sub test1()
Dim a As String
Dim sbuf As String
Dim i As Long
a = "今日は暑いぞ!123456789"
sbuf = ""
T1 = timeGetTime()
For i = 0 To 10000
sbuf = sbuf & a
Next i
T2 = timeGetTime()
Debug.Print "Size = " & Len(sbuf) & " 処理時間" & vbTab & (T2 - T1) / 1000 & " Sec"
End Sub
Sub test2()
Dim a As String
Dim sbuf As String
Dim i As Long, lLen As Long
Dim lStart As Long
a = "今日は暑いぞ!123456789"
lLen = Len(a)
sbuf = Space(320016) 'この320016はあらかじめ文字数を計りました。
'実用では算出できると思います。
T1 = timeGetTime()
For i = 0 To 20000
If i <> 0 Then
lStart = lLen * i
Else
lStart = 1
End If
Mid(sbuf, lStart, lLen) = a
Next i
T2 = timeGetTime()
Debug.Print "Size = " & Len(sbuf) & " 処理時間" & vbTab & (T2 - T1) / 1000 & " Sec"
End Sub
まぁ、物理的な書き込みの方が効果はあると思いますが、
更に高速化したい場合検討してみてください。
|
|