metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-02-15 01:59 pm

Безумие и отвага

Вопрос на собеседование:
Вам дается 100 проектов, содержащих t4 шаблоны, написанные старообрядческими псоглавцами.
Ваша задача написать MSBuild скрипт, который перегенерирует весь код, созданный из этих шаблонов.

Смех тут в том, что студия перегенерирует код только если зайти в t4 шаблон и пересохранить его, чтобы время изменилось. А изменение файлов, включенных через include не вызывает перегенерацию.

[identity profile] osdm.livejournal.com 2014-02-17 09:51 am (UTC)(link)
Читается отлично! Одна проблема - очень тормозит. LINQ можно использовать только там, где перформанс не критичен.

[identity profile] metaclass.livejournal.com 2014-02-17 10:27 am (UTC)(link)
Почему он тормозит? Там же либо тупая функциональщина либо генерация SQL.

[identity profile] osdm.livejournal.com 2014-02-17 10:32 am (UTC)(link)
С SQL не знаю, а в функциональщине постоянно создаются делегаты и классы для замыканий. Это само по себе притормаживает (по-моему, MS до сих пор не пофиксил баг, когда делегаты в дженерических классах ну очень долго создаются), но еще и засирает память, и garbage collector начинает занимать нереальное время. Естественно, это все важно только если LINQ вызывается по сотне тысяч раз в секунду, во всяких UI на это можно забить.

[identity profile] metaclass.livejournal.com 2014-02-17 11:16 am (UTC)(link)
Хм, интересно.