StringTemplate плохая производительность - PullRequest
4 голосов
/ 28 апреля 2010

Я использую StringTemplate для генерации некоторых XML-файлов из наборов данных. Иногда у меня есть более 100 000 записей в наборе данных, который перечисляется циклом в шаблоне. Он идет очень медленно (15-20 секунд на операцию), поэтому производительность мне не подходит.

Это пример того, как я использую ST для визуализации отчета:

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

StringTemplateWriter - это простой класс записи, производный от IStringTemplateWriter без отступов.

Кстати, на экране отладки я вижу много таких странных сообщений:
"Первое случайное исключение типа 'antlr.NoViableAltException' произошло в StringTemplate.DLL"

в глубине отладки я обнаружил, что он рекурсивно анализирует мой шаблон и, если что-то не получается (не знаю, что именно), он генерирует исключение NoViableAltException для возврата из глубины стека обратно на поверхность, поэтому я предполагаю, что проблема заключается в том, что в использовании слишком много попыток-ловить-бросать.

Google не нашел в этом ничего полезного.

Основной вопрос: как уменьшить это количество исключений (кроме переписывания кода ST) и повысить производительность рендеринга шаблонов?

Ответы [ 2 ]

4 голосов
/ 03 июня 2010

ST анализирует ST-шаблоны и группы с ANTLR. Если вы получаете синтаксические ошибки, ваш шаблон (ы) имеют ошибки. Все ставки на производительность отключены, поскольку для каждого из них возникает исключение. ANTLR / ST здесь не виноват;) Теренс

0 голосов
/ 10 мая 2010

NoViableAltException звучит как ошибка синтаксического анализатора. Я не уверен, почему используется ANTLR (за исключением того, что они принадлежат одному и тому же автору), но я могу только предположить, что сам язык шаблонов анализируется с использованием ANTLR. Может шаблон содержит ошибки? В любом случае обработка ошибок ANTLR действительно медленная (например, она использует исключения), поэтому, вероятно, поэтому расширение вашего шаблона происходит медленно.

...