Макрос regexp match ТОРМОЗИТ!
От: WolfHound  
Дата: 19.06.07 14:18
Оценка:
Понадобилось мне тут логи распарсить не тривиальным образом. Те простыми грепами и компанией не обойтись.
Решил использовать немерле.
Ну и макрос regexp match за компанию (нужно же чемто строчки разбирать).
Написал.
Запустил и прослезился.
Она работала очень медленно.
Полез в исходники и не обнаружил там флага RegexOptions.Compiled.
Болие того регексп создается каждый раз перед исполнением.
        // generation of final code for building regular expression and
        // extracting its groups
        <[ 
          def regobj = Regex ($(pat.ToString () : string), 
                              RegexOptions.ExplicitCapture);

          def matchobj = regobj.Match ($val);

          match (matchobj.Success) {
            | true => $(build_checking (alternatives))
            | _ => $defexpr 
          }
        ]>


Замеры показали код с макросом обрабатывает примерно 1-2 метра в секунду.
Без макроса и флага RegexOptions.Compiled 7-8 метров в секунду.
С флагом RegexOptions.Compiled 11-12 метров в секунду.

ИМХО нужно фиксить. Тем болие что тому кто знает компилятор тут похоже на 10 минут работы.
regobj сделать статической да засунуть туда регексп с опциями STRE.RegexOptions.Compiled | STRE.RegexOptions.ExplicitCapture.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.