Я пытаюсь запустить RE в своем приложении Lazarus на компоненте SynEdit, но это слишком медленно, даже замораживая мое приложение. Мой файл довольно большой (1.5gb), но когда я RE использую Sublime Text, он обрабатывает все очень быстро (вопрос секунд). Итак, что я делаю, я загружаю свой файл CSV в свой компонент SynEdit и обрабатываю RE оттуда. Что-то вроде этого:Регулярное медленное в Лазаресе. Что мне делать?
mySynEdit.LoadFromFile('myFile.CSV');
...
var
rx:Tregexpr;
res:String;
button.click...
begin
rx:=TRegexpr.create;
rx.expression:='myRE';
try
res:=rx.replace(mySynEdit.Text, 'myReplaceText', true);
mySynEdit.text:=res;
finally
rx.Free;
end;
end;
Любая подсказка о том, почему так долго требуется обработать этот файл? Должен ли я использовать другую «более быструю» библиотеку? Поэтому, пожалуйста, помогите мне ускорить этот процесс.
Спасибо, как всегда J
Что такое регулярное выражение? Можете ли вы воспроизвести это на regex101.com? –
Это synedit, который так медленно выбирает определенную строку, или регулярное выражение ищет линию? IOW, это не должно быть регулярное выражение. Попробуйте то же самое с текстом в более удобном для доступа формате, например. TStringList (или аналогичный) и посмотрите, слишком ли он медленный. Если нет, это был Synedit. Обратите внимание, что 1,5 ГБ может привести к загрузке текста из основной памяти и из нее, что может быть очень медленным. В этом случае может потребоваться другой подход (например, файл с отображением памяти). –
SynEdit - синтаксический ярлык. Вы кормите его текстовым файлом 1,5 ГБ. Это сразу заставляет нас подозревать, что время hog здесь - огромная задача разбора этого текстового файла 1,5 ГБ для токенов синтаксиса. Определенно согласен с @RudyVelthuis - вам нужно проверить это с помощью более разумного контейнера для вашего текста. Профиль (или даже просто установить точку останова) - узнайте, где находится ваше узкое место. –