java - StringTemplate 比普通字符串连接慢?

标签 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(),对吗?

最佳答案

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

在底层,StringTemplate 必须做更多的工作,而不仅仅是像您一样天真地使用 StringBuilder(它需要构造抽象语法树、遍历它们、渲染文本等),这可能会增加开销。您还没有提到您正在使用的 StringTemplate 版本;据说 StringTemplate 4 比以前的版本快得多,部分原因是它涉及直接 translation to bytecode

一般来说,在性能和可维护性、可读性和重用性之间需要进行权衡。如果 StringTemplate 对于您的目的来说足够快,我认为它的好处远远超过它的问题。

关于java - StringTemplate 比普通字符串连接慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5816889/

相关文章:

c# - 什么是标记接口(interface)?

java - Java 字符串格式化

java - 是否有包含 spring-core 3 的公共(public) Maven 存储库?

C# - 哪个是 ‘switch on type’ 的最佳替代方案?

javascript - jQueryeach() 重写了吗?

java - Stringtemplate:是否可以将HashMap使用的模板应用于多值属性

java - 如何在 DynamicJasper 中抑制列标题的显示?

multithreading - Pocket PC 2003 C# 性能问题...我应该对其进行线程处理吗?

stringtemplate - StringTemplate 中的花括号

grails - 将StringTemplate与Grails域类一起使用作为模型