Использование регулярного выражения быстрее, чем IndexOf? - PullRequest
10 голосов
/ 21 февраля 2012

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

Я использую IndexOf, чтобы определить, является ли определеннаяключевое слово присутствует.

Это идеальный способ или RegEX будет быстрее?

Там обрабатывается около 10 элементов в секунду или около того.

Ответы [ 8 ]

16 голосов
/ 21 февраля 2012

Для простого поиска ключевого слова метод IndexOf быстрее, чем использование регулярного выражения. Регулярные выражения являются мощными, но их сила заключается в гибкости, а не в скорости. Они не бьют строковые методы при простых строковых операциях.

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

12 голосов
/ 21 февраля 2012

http://ayende.com/blog/2930/regex-vs-string-indexof

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

3 голосов
/ 21 февраля 2012

Единственный способ узнать наверняка - это проверить его. Но сделать обоснованное предположение зависит от количества ключевых слов, которые вы тестируете, длины текста и т. Д. Вероятно, indexOf победит.

Единственный способ узнать наверняка - написать тест для вашего конкретного сценария.

2 голосов
/ 21 февраля 2012

Я сомневаюсь в этом - indexOf - это очень простой алгоритм, который просто ищет вашу строку и возвращает первое найденное вхождение.

Regex - гораздо более сложный механизм, который необходимо проанализировать и проверитьпротив всей строки.Если ваша строка очень большая, вам лучше использовать indexOf.

1 голос
/ 21 февраля 2012

По крайней мере, этот программист быстрее понимает код, который использует IndexOf!

Оправдывает ли экономия времени процессора то, что следующий человек понимает код?

1 голос
/ 21 февраля 2012

Почему бы не поэкспериментировать и не измерить время с помощью класса System.Diagnostics.Stopwatch?http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

Установите объект секундомера до операции indexOf, а затем измерьте прошедшее время после нее.Затем поменяйте indexOf на регулярное выражение.Наконец, доложите о своих результатах, чтобы мы тоже могли их увидеть!

1 голос
/ 21 февраля 2012

Прежде всего, при 10 элементах в секунду вам, вероятно, даже не нужно думать о производительности.

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

Его производительность также может зависеть от выбранного сравнения строк / культуры. Я ожидаю, что StringComparison.Ordinal будет самым быстрым.

0 голосов
/ 21 февраля 2012

Вы можете найти информацию об этом самом запросе по этой ссылке: http://ayende.com/blog/2930/regex-vs-string-indexof

В целом, кажется, это указывает на то, что чем больше поисковый шаблон, тем лучше RegEx выполняет сравнительно.

...