2011-04-28 3 views
0
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(); 
} 

위 것이라고 느린 약 5 배 일반 StringBuilder에 따라보다 ....StringTemplate이 일반 문자열 연결보다 느린가요?

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()을 호출하는 것 같습니다.

+1

질문을 더 잘 설명해야합니다. 우리가 코드를 실행하고, 시간을 내고, 데이터를 제공하여 귀하의 질문이 실제로 무엇인지 알려줄 것으로 기대하십니까? 대신, 당신이 그 시험에서 보았던 것, 당신이 기대 한 것, 그리고 아마도 그 차이의 이유에 대한 당신의 가설을 말해주십시오. –

+1

예를 들어, 어떤 언어/런타임을 사용합니까? StringTemplate은 무엇입니까 (코드에 전혀 포함되어 있지 않기 때문에). "어떤 생각이나 제안"이라고 말하면 내 질문은 "무엇에 관한 것입니까?" 기본적으로 ... ** 당신의 질문은 무엇입니까 **? –

+0

@ Lasse V. Karlsen : 당신 말이 맞습니다. 이제 질문을 좀 더 분명하게 제기합니다. – rayeaster

답변

6

그런 작은 테스트에서 유효한 성능 결론을 도출 할 수 없을 것이라고 생각합니다. 실제 사용에서 어떻게 작동합니까?

StringTemplate은 StringBuilder를 사용하는 것보다 훨씬 더 많은 작업을 수행해야합니다 (추상 구문 트리를 구성하고 걷고, 텍스트를 렌더링해야합니다.) 이는 아마도 오버 헤드에 기여합니다. 사용중인 StringTemplate의 버전에 대해서는 언급하지 않았습니다. 아마도 StringTemplate 4는 이전 버전보다 훨씬 빠르며 부분적으로는 translation to bytecode이 포함되기 때문입니다.

일반적으로 성능과 유지 관리성, 가독성 및 재사용간에 균형이 맞춰집니다. StringTemplate이 당신의 목적에 충분히 빠르다면, 그것의 이점이 그것의 문제보다 훨씬 중요하다고 생각합니다.

+0

의견이 훌륭하게 들립니다! 감사합니다! – rayeaster

+1

나는 anltr의 StringTemplate보다는 StringTemplate4의 ST를 사용하여 간단한 테스트를 다시 시도했다. 빨리 빨리! 고마워! – rayeaster

1

ST를 anltr3.3의 StringTemplate 대신 StringTemplate4에 사용하십시오.