VBS中の文字列接続の性能問題


もちろん、少量の文字列接続に対して、効率はプログラムに大きな影響を与えていません。極端な問題を考えてみましょう。1から100000までの数字をすべて一つの文字列に接続します。一番簡単な解決策は直接使用&接続です。
 
begin = Timer
For i = 1 To 100000
str = str & CStr(i)
Next
WScript.Echo str
finish = Timer
WScript.Echo finish - begin
ですが、このプログラムは私のパソコンで60.688秒実行したいです。効率が低すぎます。別の方式では、
 
begin = Timer
Dim arr(100000)
For i = 1 To 100000
arr(i) = i
Next
str = Join(arr, "")
WScript.Echo str
finish = Timer
WScript.Echo finish - begin
は今回0.742秒しか使われませんでした。60倍近くになりました。この問題では配列の大きさは事前に決められますが、配列の大きさが予知できない場合は動的配列を使用しなければなりません。私はレベルが低いので、ダイナミック配列が使えません。もっと簡単な方法がありますか?答えはあります。それは辞書です。
 
begin = Timer
Set oDic = CreateObject("scripting.dictionary")
For i = 1 To 100000
oDic.Add i, CStr(i)
Next
str = Join(oDic.Items, "")
WScript.Echo str
finish = Timer
WScript.Echo finish - begin
の運行時間は1.599で、行列の2倍です。しかし、やはり&よりずっと速いです。そして、配列よりも便利です。まとめ:&接続記号の効率は比較的低く、少量の文字列を接続する時に使用できますが、大量の文字列を接続する時はJoin関数+配列を使用するべきです。原文:http://demon.tw/programming/vbs-string-concatenation.html