我不得不为GWT应用选择一种有效的字符串串联方式。为此,我做了一个小测试,并认为其他人也可以帮助他们了解结果。
所以,令人惊讶的是,差异非常小:1000000连接约100ms。因此,请从代码阅读的角度选择合适的。
我的测试很简单:
// + operator
private void str() {
Date start = new Date();
String out = "";
for(int a=0;a<1000000;a++) {
out += "item" + a;
}
Date end = new Date();
MessageBar.error("str:" + (end.getTime() - start.getTime()));
}
// StringBuffer implementation
private void sb() {
Date start = new Date();
StringBuffer out = new StringBuffer();
for(int a=0;a<1000000;a++) {
out.append("item" + a);
}
Date end = new Date();
MessageBar.error("sb:" + (end.getTime() - start.getTime()));
}
结果是:
str:1612
str:1788
str:1579
sb:1765
sb:1818
sb:1839
答案 0 :(得分:8)
关于stan229的问题和比尔蜥蜴的请求。
从浏览器到浏览器的性能差异确实很有趣。对我来说,问题是“选择哪种连接方法”,我得到了我想要的答案。但是这里有更多的测试结果:
chrome 10.0.648.204:
str: 748
sb : 849
firefox 3.6.16:
str: 1681
sb : 1861
ie 8:
str: 2484
sb : 4094
opera 11.10
str: 802
sb : 792
所以,我得到的答案是: +运算符提供更好的性能
我的下一个问题是提供更好性能的原因:
int i=0;
// this
String result = String.valueOf(i);
// or this
String result = i + "";
一旦我做了测试,会发布这个,或者,如果你有答案 - 请发布
答案 1 :(得分:0)
您可以查看gwt源代码并了解如何模拟StringBuffer / StringBuilder。 GWT为浏览器选择最佳的字符串连接方式。
使用多个附加创建字符串的快速方法。这是实现的 使用通过延迟绑定选择的StringBufferImpl。大多数方法都会给出预期的性能结果......