像下面的代码这样的东西 super 慢:
var str:String = ""
for (var i:Number = 0 ; i<1000000000000000000 ; ++i) {
str += "someLongLongLongLongLongLongLongLongLongString";
}
Java 中有
StringBuilder
但似乎没有 AS 的等价物。那么,你们如何处理大字符串连接?
更新:
谢谢大家的回答!
我刚刚编写了自己的 testing program 。使用
+=
已经是最快的了……慢的是把它放在 TextArea 上……我已经投票支持你们中的大多数人,因为这些建议是有道理的 :) 尽管我的测试结果表明我的问题似乎有些问题,因为我要求的东西比已经最好的东西更好:P
最佳答案
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
performancetests.Strings (1 iterations)
Player version: MAC 10,0,32,18 (debug)
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
method...................................................ttl ms...avg ms
stringsWithConcatMethod 17555 17555.00
stringsWithPlusConcat 4972 4972.00
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
我不是受虐狂,所以我只是使用了 10000000 次迭代循环:
var str:String = ""
for (var i:Number = 0 ; i<10000000 ; ++i) {
str += "someLongLongLongLongLongLongLongLongLongString";
}
相对:
var str:String = ""
for (var i:Number = 0 ; i<10000000 ; ++i) {
str = str.concat("someLongLongLongLongLongLongLongLongLongString");
}
使用 Grant Skinner's AS3 Performance Test Harness 。 String::concat 方法甚至更慢,但考虑到您的条件 as3 可能只是 sloooow。 (结果中的 1 次迭代是经过 10000000 次迭代循环的 1 次)。我对结果感到相当惊讶。我认为 concat 会更快。
关于flash - 当输入很大时,字符串连接非常慢,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1536260/