Regex замедляются на Windows Server 2008

Я соглашаюсь с предложением atzz использования Системы ценностей Длины Тега. Для будущей совместимости Вы могли сохранить ряд "указателей" на записи TLV в запуске (или возможно Тег, Указатель и иметь точку указателя к Длине, Значению; или возможно Тег, Длина, Указатель и затем имеют все данные вместе в другом месте?).

Так, мой файл мог посмотреть что-то как:

magic number/file id
version
tag for first data entry
pointer to first data entry --------+
tag for second data entry           |
pointer to second data entry        |
...                                 |
length of first data entry <--------+
value for first data entry
...

магическое число, версия, теги, указатели и длины все были бы предопределенной длиной набора для легкого декодирования. Скажите, 2 байта. Или 4, в зависимости от того, в чем Вы нуждаетесь. Они не должны все быть тем же (например, все теги составляют 1 байт, указатели равняются 4 и т.д.).

тег сообщает то, что хранится. указатель говорит Вам, где (или смещение или абсолютное значение, в байтах), длина говорит Вам, насколько большой данные, и , значение длина байты данных тега типа . При использовании декодера MyFileFormat v1 на файле MyFileFormat v2 указатели позволяют Вам пропускать разделы, которые не понимает v1 декодер. При простом пропуске недопустимых тегов можно, вероятно, просто использовать TLV вместо TPLV.

я или вручил бы коду что-то как этот, или возможно определил бы мой формат в ASN.1 и генерировал бы кодек (я работаю в телекоммуникациях, таким образом, ASN.1/TLV имеет смысл мне:-D)

5
задан Laurel 5 October 2016 в 14:48
поделиться

3 ответа

Я нашел решение, не верное, но идеальное в моем случае. По какой-то причине, если я опущу флаг RegexOptions.Compiled , Regex будет намного быстрее. Мне даже удалось выполнить Regex на 100 длинных фразах менее чем за 65 миллисекунд на сервере 2008.

Это должно быть ошибка в .net lib, поскольку некомпилированная версия должна быть намного медленнее, чем скомпилированная версия. В любом случае, менее 1 миллисекунды на проверку для меня вполне приемлемо :)

Мне даже удалось выполнить Regex на 100 длинных фразах менее чем за 65 миллисекунд на сервере 2008.

Это должно быть ошибка в .net lib, поскольку некомпилированная версия должна быть намного медленнее, чем скомпилированная версия. В любом случае, менее 1 миллисекунды на проверку для меня вполне приемлемо :)

Мне даже удалось выполнить Regex на 100 длинных фразах менее чем за 65 миллисекунд на сервере 2008.

Это должно быть ошибка в .net lib, поскольку некомпилированная версия должна быть намного медленнее, чем скомпилированная версия. В любом случае, менее 1 миллисекунды на проверку для меня вполне приемлемо :)

4
ответ дан 14 December 2019 в 01:12
поделиться

Вы можете предварительно скомпилировать регулярные выражения с помощью метода Regex.CompileToAssembly , а затем развернуть скомпилированные регулярные выражения на своем сервере.

4
ответ дан 14 December 2019 в 01:12
поделиться

Я столкнулся с той же проблемой. Мое приложение отлично работает на машинах x86, но раздувается память и зависает на x64. Удаление флага компиляции не помогло. Я попробовал это сегодня на .net 4.0, и проблема осталась. Если у вас есть репро, я предлагаю вам зарегистрировать ошибку.

Думаю, MSFT знает об этом, см. Нижний комментарий здесь

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

1
ответ дан 14 December 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: