2015-03-19 3 views
0

Я пытаюсь использовать регулярное выражение, и регулярное выражение имеет недостаток производительности, даже если он скомпилирован.Должен ли я использовать Regex.IsMatch перед запуском Regex.Replace

Что я хочу знать, прежде чем на самом деле запустить Regex.Replace, следует ли сначала проверить, есть ли совпадение в строке, используя Regex.IsMatch?

Этот вопрос касается оптимизации и производительности.

+2

Ответ на большинство вопросов производительности - «попробуйте в своей среде, измерьте его объективно и посмотрите». Однако в этом случае я бы предположил, что это пустая трата времени, чтобы выяснить, подходит ли регулярное выражение, прежде чем делать замену, поскольку первое, что нужно сделать в замене, в любом случае совпадать. –

+1

Мое предположение не будет, вызывая Regex.IsMatch до Regex.Replace фактически замедлит выполнение. Но так как у вас есть код, почему бы не проверить его, чтобы убедиться? – Dirk

ответ

2

В соответствии с моим комментарием, вопросы производительности обычно отвечают, пытаясь в вашей среде и объективно оценивая их. Тем не менее, это вполне определенно, и, основываясь на догадке замены, нужно сделать матч в любом случае, мы можем пойти и inspect the source code. Мы видим, что в рамках метода Replace, самое первое, что он делает после проверки аргументов, чтобы выполнить матч:

match = regex.Match(input, startat); 

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

+0

Raaah Я 3 минуты поздно:/молодец! –

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