Как вызвать Visual Studio, которую обрабатывает по шаблону 2008 для регенерации кода от T4, когда XML-файл изменяется?

@Bernard:

я должен признать, большая часть Вашего примера пошла прямо по моей голове. Это действительно компилирует и, кажется, работает, все же. Действительно ли это безопасно для систем SMP или SpeedStep?

Это - хороший вопрос... Я думаю код хорошо. С практической точки зрения мы используем его в моей компании каждый день, и мы работаем на довольно огромном количестве полей, всего от 2-8 ядер. Конечно, YMMV, и т.д., но это, кажется, надежное и низкие издержки (потому что это не превращает контекстное переключение в системное пространство), метод синхронизации.

Обычно то, как это работает:

  • объявляют, что блок кода ассемблер (и энергозависимый, таким образом, оптимизатор оставит его в покое).
  • выполняют инструкцию CPUID. В дополнение к получению некоторой информации ЦП (с которым мы ничего не делаем) это синхронизирует буфер выполнения ЦП так, чтобы синхронизации не были затронуты выполнением с изменением последовательности.
  • выполняют rdtsc (метка времени чтения) выполнение. Это выбирает количество циклов машины, выполняемых, так как процессор был сброшен. Это - 64-разрядное значение, таким образом, с текущими скоростями ЦП оно перенесет каждые 194 года или около этого. Интересно, в исходной ссылке Pentium, они отмечают, что она переносит каждые 5 800 лет или около этого.
  • последние строки хранят значения от регистров в переменные привет и lo, и помещают это в 64-разрядное возвращаемое значение.

Определенные примечания:

  • выполнение с изменением последовательности может вызвать неправильные результаты, таким образом, мы выполняем "cpuid" инструкцию, которая в дополнение к предоставлению Вам некоторая информация о CPU также синхронизирует любое неисправное выполнение инструкции.

  • Большая часть ОС синхронизирует счетчики на центральных процессорах, когда они запускают, таким образом, ответ хорош к в течение нескольких наносекунд.

  • бывший в спящем режиме комментарий, вероятно, верен, но на практике Вы, вероятно, не заботитесь о синхронизациях через границы спящего режима.

  • относительно speedstep: Более новый Intel CPUs компенсирует скорость, изменяет и возвращает скорректированное количество. Я сделал быстрое сканирование по некоторым полям в нашей сети и нашел только одно поле, которое не имело ее: Pentium 3, выполняющий некоторый старый сервер базы данных. (это поля Linux, таким образом, я сверился: grep constant_tsc/proc/cpuinfo)

  • я не уверен в центральных процессорах AMD, мы - прежде всего, магазин Intel, хотя я знаю, что некоторые наши системные гуру низкого уровня сделали оценку AMD.

Hope это удовлетворяет Ваше любопытство, это - интересное и (по моему скромному мнению) под - изученная область программирования. Вы знаете, когда Jeff и Joel говорили о том, должен ли программист знать C? Я кричал на них, "эй забудьте, что высокоуровневый C материал... ассемблер - то, что необходимо изучить, хотите ли Вы знать то, что делает компьютер!"

5
задан Daren Thomas 28 October 2009 в 09:29
поделиться

1 ответ

Вы можете использовать T4ScriptFileGenerator из T4Toolbox в качестве специального инструмента для вашего XML-файла. Допустим, у вас есть файл Test.XML в вашем проекте с помощью этого настраиваемого инструмента. При первом сохранении Test.XML этот специальный инструмент создает новый файл Test.tt. Вы можете разместить здесь свою логику генерации кода (или #include другие ваши файлы .tt). В следующий раз, когда вы сохраните Test.XML, он преобразует (сгенерирует код) существующий Test.tt.

2
ответ дан 15 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: