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/