Кэширование нескольких динамически сгенерированных выражений регулярных выражений на диск - PullRequest
2 голосов
/ 30 ноября 2011

У меня есть программа, над которой я работаю, которая использует очень большое количество (> 100) динамически генерируемых выражений Regex.Каждое регулярное выражение используется для большого количества строк (в зависимости от ситуации, это может быть> 2k), поэтому я скомпилировал их и кэшировал их использование внутри.Тем не менее, программа запускается многократно (это часть инструмента сборки), и компиляция этих динамически генерируемых выражений занимает значительное время каждый раз, когда программа запускается.У меня уже есть кэш на диске (анализ не требуется, если кэш действителен), и я могу хранить в нем скомпилированные выражения Regex, однако я не могу найти способ сделать это правильно.Сначала я подумал об использовании Regex.CompileToAssembly, но Mono не поддерживает его, и программа должна работать как на Mono, так и на MS.net.Из-за этого я не могу найти хороший способ кэширования выражений.Мне нужен только метод IsMatch (string) из скомпилированного Regex, и у меня есть возможность изменить реализацию Mono Regex и включить ее в мою программу, но я не знаю, с чего начать.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

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

0 голосов
/ 30 ноября 2011

Вы можете создать другую программу, которая будет компилировать выражение на этапе сборки.А потом поставьте уже скомпилированные сборки с вашим проектом.Это устранит проблему не поддерживаемых Regex.CompileToAssembly в Mono.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...