статические и экземпляры версий Regex.Match в C # - PullRequest
4 голосов
/ 21 июля 2009

Я заметил некоторый код, который использует статический метод:

Regex.IsMatch([someRegexStr], [someInputStr])

Стоит ли заменить его методом экземпляра? Как:

private readonly Regex myRegex = new Regex([someRegexStr]);

...

myRegex.IsMatch([someInputStr]);

Ответы [ 4 ]

6 голосов
/ 21 июля 2009

Одна из рекомендаций по оптимизации регулярных выражений по следующей ссылке: Оптимизация регулярных выражений от Джим Мишель

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

Статья содержит интересные темы, такие как кэширование регулярных выражений и компиляция регулярных выражений вместе с рекомендациями по оптимизации.

3 голосов
/ 23 июля 2009

Последние 15 внутренних представлений регулярного выражения, созданных из статического вызова, кэшируются.

Я говорю об этом и о внутренней работе в " Как на самом деле работают регулярные выражения .NET ."

3 голосов
/ 21 июля 2009

Существует некоторая начальная обработка, которая происходит при вызове статического метода Regex.IsMatch() - по существу, для проверки правильности вашего регулярного выражения и преобразования его в представление с конечным автоматом.

Если вы планируете запускать одно и то же регулярное выражение несколько раз, вам, вероятно, лучше создать экземпляр Regex и вызвать метод экземпляра IsMatch (). Вы можете скомпилировать выражение в байт-код CLR с помощью флага RegexOptions.Compiled, что еще больше повышает производительность.

2 голосов
/ 21 июля 2009

Да, особенно если вы можете сделать это скомпилированным выражением. Построить объект Regex медленнее, но гораздо быстрее использовать для чистого выигрыша.

Редактировать: Потенциально (возможно, ++) намного быстрее. Нет требования, чтобы CLI имел хорошую оптимизацию, но я собираюсь догадаться, что Microsoft, безусловно, такова. : D

private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...