2010-04-28 4 views
4

데이터 집합에서 일부 XML 파일을 생성하기 위해 StringTemplate을 사용하고 있습니다. 때로는 템플릿의 루프에 의해 열거되는 데이터 세트에 100,000 개가 넘는 레코드가 있습니다. 성능이 저에게 좋지 않으므로 매우 느립니다 (작업 당 15-20 초).StringTemplate 성능이 좋지 않음

using (var sw = new StringWriter()) 
{ 
st.Write(new StringTemplateWriter(sw)); 
return sw.ToString(); 
} 

StringTemplateWriter 들여 쓰기없이 IStringTemplateWriter에서 파생 된 간단한 작가 - 클래스 :

내가 보고서를 렌더링하는 ST를 사용하는 방법 예입니다. 깊은에
는 "유형 'antlr.NoViableAltException'의 첫 번째 예외가 StringTemplate.DLL에서 발생했습니다"

: 나는 그런 이상한 메시지를 많이 볼 수있는 디버그 화면에서 그런데

, 디버그 나는 그것을 재귀 적으로 내 템플릿을 구문 분석하고 무언가가 (정확히 무엇을 모르겠다) NoViableAltException 예외가 너무 많은 시도를 사용하여 문제가 추측 표면의 깊은 스택에서 반환하려면 throw합니다 발견했습니다. - 캐치 던지기.

Google은 이것에 아무런 유용한 것을 발견하지 못했습니다.

홈페이지 질문 : (ST의 코드를 재 작성 제외) 예외의 수를 감소 및 템플릿 렌더링의 성능을 개선하기 위해?

답변

4

ST는 ST 템플릿과 ANTLR이있는 그룹을 구문 분석합니다. 구문 오류가 발생하면 템플릿에 오류가 있습니다. 각 베팅은 각 이벤트에 대해 예외를 throw하므로 성능이 떨어집니다. 잘못 여기 ANTLR/ST하지) 테렌스

+0

. 내 템플릿은 초기화 도중 오류를주지 않으므로 제대로 작동하지만 어쩌면 올바른 것일 수 있습니다. 템플릿의 사소한 오류가 있습니다. 많은 템플릿이 있기 때문에 이유를 찾기가 어렵습니다. – Genius

0

NoViableAltException 파서 오류처럼 들린다. ANTLR이 사용되는 이유는 모르겠지만 (같은 저자를 제외하고), 내가 생각할 수있는 유일한 추측은 템플릿 언어 자체가 ANTLR을 사용하여 구문 분석된다는 것입니다. 템플릿에 오류가있을 수 있습니까? 어쨌든 ANTLR의 오류 처리는 정말 느리고 (하나는 예외를 사용함), 아마도 템플릿 확장이 느린 이유 일 것입니다.

+0

예, 이것이는 ANTLR의 나쁜 성능을 보인다. 더 나은 성능을 가진 또 다른 문자열 템플릿 엔진에 대한 권장 사항이 있습니까? 귀하의 답변에 고맙습니다. – Genius

+0

명확히하기 위해, 나는 StringTemplate이 느리다는 말을하지 않았습니다. 단지 ANTLR의 기본 오류 처리기 구현이 느리고 (별로 도움이되지 않습니다). 일단 기본 오류를 수정하면 성능이 많이 향상된다는 것을 알게 될 것입니다. 덕분에 – Krumelur