Выполняется ли шаблон T4 каждый раз, когда его запрашивают?

#c# #.net #templates #code-generation #t4

#c# #.net #шаблоны #генерация кода #t4

Вопрос:

Я пытаюсь настроить среду, которая позволила бы мне использовать шаблон для рассылки электронной почты тысячам людей. Во всем этом ключевым является производительность, и я пытаюсь выяснить, когда myscript.tt запускается, компилируется ли он и выполняется ли каждый раз или существует скомпилированный объект, который можно повторно использовать для последующих вызовов для выполнения скрипта?

Ответ №1:

По сути, вы вызываете это в предварительно скомпилированном шаблоне:

 string result = new MyTemplate().TransformText();
  

Шаблон и его код (логика и т.д.) Создаются один раз, Но затем вы вызываете TransformText для генерации динамически желаемого результата. В вашем случае, я думаю, вы отправляете своему шаблону разные адреса электронной почты каждый раз, когда вызываете TransformText.

Этот пост ответит на ваш вопрос:

Генерация текста во время выполнения с помощью текстовых шаблонов T4

Более подробная информация здесь:

Написание кода, который Записывает Код

Комментарии:

1. «На первом шаге движок предварительно обрабатывает шаблон: он анализирует инструкции по обработке, текстовые и кодовые блоки, генерирует конкретный класс TextTransformation и компилирует его в сборку .NET. На втором шаге движок T4 создает экземпляр класса GeneratedTextTransformation, вызывает его метод TransformText и сохраняет возвращаемую им строку в выходной файл.» Это второй шаг, который вызывает путаницу. Я был убежден, что предварительно обработанные шаблоны будут созданы только один раз и со временем будут использоваться повторно, но второй шаг вызывает у меня некоторое замешательство. Мысли?

2. Выше приведен отрывок из ссылки Олега, которую вы опубликовали.

3. @brainydexter: вы вызываете это в предварительно скомпилированном template: string result = new MyTemplate().TransformText(); Шаблон и его код (логика и т.д.) Создаются один раз, Но затем вы вызываете TransformText для генерации динамически желаемого результата. В вашем случае, я думаю, вы отправляете своему шаблону разные адреса электронной почты каждый раз, когда вызываете TransformText.

4. Прочитайте параметры передачи в конструкторе здесь: msdn.microsoft.com/en-us/library/ee844259.aspx