6

Я работаю над нашей системой непрерывной интеграции, и я заинтересован в моделировании обработки наших систем с неожиданно большим временем компиляции. Есть ли способ заставить компиляцию занять много времени? Или, возможно, вынудить его в какой-то цикл, который потребует большого количества времени для компиляции? Я ищу что-то так же просто, как Thread.Sleep() только для компиляции, а не для исполнения.Можно ли написать код, который вызовет длительные сроки компиляции?

Как насчет использования директив препроцессора?

Любые идеи?

+13

Использование C++ и шаблона метапрограммирования с безумно рекурсивными шаблонами? –

+4

Поверните этот комментарий в ответ, потому что тогда я мог бы голосовать за него должным образом. –

+0

Попробуйте функцию ackermann в коде шаблона. Факториал в o (n!) Также может преуспеть. – BCS

ответ

9

Вот MSBuild sleep task, который должен сделать трюк. Вызовите его из цели BeforeBuild в файле .csproj или wherever is appropriate для ваших нужд.

MSBuild Community Tasks также имеет задачу «Сон», поэтому, если вам нужно использовать некоторые из своих других задач, которые я нашел очень полезными.

7

Очевидно, задача сна - это путь. Но если вас интересуют способы сделать C# -компилятор произвольным, FYI, можно кодировать проблемы в исходном коде, которые вынуждают алгоритм разрешения перегрузки выполнять алгоритм O (n^m). Выбирайте n и m достаточно большим, и вы можете заставить компилятор сделать столько работы, сколько хотите.

Вот моя статья на эту тему, если вам интересно.

http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx

+0

Удивительный! Спасибо за отличную информацию. –

2

У меня был сослуживца один раз, кто написал заявление переключатель в 16 000 строк. Это потребовалось навсегда, чтобы скомпилировать, а затем, когда он расширил его немного больше, он фактически сломал компилятор. Так или иначе, я не уверен, что это вы имели в виду.

Смежные вопросы