StringTemplate比纯字符串连接慢吗?

时间:2011-04-28 10:05:04

标签: java performance stringtemplate

StringTemplate insert = new StringTemplate("insert $table$ values($value;separator=\",\"$)");
int testSize = 10000;
for(int i=0;i<testSize;i++) {           
    insert.setAttribute("table", "aTable");
    String[] vs = {"1", "1", "'aaa'", "'bbb'"};
    for(int j = 0;j < vs.length;j++){   
        insert.setAttribute("value", vs[j]);    
    }
    insert.toString();  
    insert.reset(); 
}   

上面会比普通的StringBuilder大约慢5倍....

int testSize = 10000;
StringBuilder sb= new StringBuilder(100);
for(int i=0; i<testSize; i++) {
    sb.append("INSERT ").append("aTable (");
    String[] v = {"1", "1", "'aaa'", "'bbb'"};
    for(int j=0; j<v.length; j++) { 
        if(j > 0) {
        sb.append(",");
        }
        sb.append(v[j]);    
    }
    sb.append(")");
    sb.toString();
}

关于如何提高StringTemplate效率的任何想法或建议? 谢谢! StringTemplate似乎在每个令牌上调用toString(),对吗?

2 个答案:

答案 0 :(得分:6)

我认为你不能从如此小的测试中得出有效的性能结论;它在现实世界中的表现如何?

引擎盖下StringTemplate必须做更多的工作,而不仅仅是像你一样天真地使用StringBuilder(它需要构建抽象语法树,遍历它们,渲染文本等),这可能会导致开销。您还没有提到任何关于您正在使用的StringTemplate版本的信息;据说StringTemplate 4比以前的版本快得多,部分原因是它涉及直接translation to bytecode

通常,性能和可维护性,可读性和重用之间将存在权衡。如果StringTemplate的速度足够快,我认为它的好处远大于它的问题。

答案 1 :(得分:1)

在StringTemplate4中使用ST而不是在anltr3.3中使用StringTemplate