Понадобилось мне тут логи распарсить не тривиальным образом. Те простыми грепами и компанией не обойтись.
Решил использовать немерле.
Ну и макрос 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>>