大きな文字列が猛烈に遅い(3)

大きな文字列の結合が遅いことを以前示したが、
その際、結果の文字列の長さが効くのか、
連結前の文字列の長さが効くのかを調べるのを忘れていた。
次のようなコードで試してみた。


for(var i = 1000; i < 20000; i = Math.round(i * 1.05)) {
var i1, i2;
for(var i1 = i >> 1; i1 > 100; i1 >>= 1) {
i2 = i - i1;
var s1 = makeString(i1);
var s2 = makeString(i2);

var d = (new Date()).getTime();
for(var j = 0; j < 10000; j++) {
var str = s1 + s2;
}
WScript.Echo(i1 + "," + i + ","
+ ( (new Date() ).getTime() - d));
}
}

結果は次のようになった。

連結した結果の文字列の長さが16kBを超えると、
何かが変わるらしい。
元の文字列の長さとの相関はあまりないようだ。