Действительно ли возможно написать код, который вызовет долгое время компиляции?

Вам не нужен regex, чтобы найти, содержит ли строка по крайней мере один из данного списка подстрок. В Python:

def contain(string_, substrings):
    return any(s in string_ for s in substrings)

Вышеупомянутое является медленным для большого string_ и много подстрок. GNU fgrep может эффективно искать несколько шаблонов одновременно.

Используя regex

import re

def contain(string_, substrings):
    regex = '|'.join("(?:%s)" % re.escape(s) for s in substrings)
    return re.search(regex, string_) is not None

, Связанный

6
задан The Matt 28 October 2009 в 05:42
поделиться

3 ответа

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

Задачи сообщества MSBuild также имеют задачу сна, поэтому используйте ее, если вам нужно других своих задач, которые я считаю очень полезными.

9
ответ дан 8 December 2019 в 13:00
поделиться

Obviously the Sleep task is the way to go. But if you are interested in ways of making the C# compiler take arbitrarily long, FYI it is possible to encode problems in the source code which force the overload resolution algorithm to execute an O(n^m) algorithm. Choose n and m large enough and you can make the compiler do as much work as you like.

Here's my article on that subject if you're interested.

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

7
ответ дан 8 December 2019 в 13:00
поделиться

Однажды у меня был коллега, который написал оператор переключения на 16 000 строк. На компиляцию ушла целая вечность, а затем, когда он расширил ее еще немного, компилятор сломался. Почему-то я не уверен, что вы имели в виду именно это.

2
ответ дан 8 December 2019 в 13:00
поделиться