GWT字符串连接运算符+与字符串缓冲区

时间:2011-04-21 18:07:19

标签: performance string gwt concatenation

我不得不为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

2 个答案:

答案 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为浏览器选择最佳的字符串连接方式。

GWT 2.2.0 StringBuffer source

  

使用多个附加创建字符串的快速方法。这是实现的    使用通过延迟绑定选择的StringBufferImpl。大多数方法都会给出预期的性能结果......