Если это работает со списком, вероятно, каждый раз требуется много времени, чтобы перекрасить все.Вы можете отключить это поведение.Окружите внешний цикл следующим образом:
listbox.Items.BeginUpdate;
try
//do the loop here
finally
listbox.Items.EndUpdate;
end;
Кроме того, вы можете назначить логическое значение непосредственно для вычисления логического выражения, что сэкономит некоторое время на вашем внутреннем цикле.Итак:
Function ExistWordInString ( aString, aSearchString : String; aSearchOptions : TStringSearchOptions ) : Boolean;
Var
Size : Integer;
Begin
Size := Length ( aString );
result := SearchBuf ( Pchar ( aString ), Size, 0, 0, aSearchString, aSearchOptions ) <> Nil;
End;
Не уверен, сколько из этого будет иметь значение.Если вы вносите эти изменения, но они все еще слишком медленные, попробуйте запустить вашу программу через профилировщик, такой как Sampling Profiler , который поможет вам увидеть, на что ваш код тратит большую часть своего времени.