Я знаю, что много кода из FastStrings было включено в Delphi XE. Мне нужно обработать несколько тысяч файлов и выполнить некоторую обработку текста. Существует ли «более быстрая» альтернатива подпрограмме System.Pos?
Delphi XE — более быстрая альтернатива функции System.Pos
comment
RBA: в зависимости от того, что вы ищете. Вы можете искать символ, подстроку или любой массив подстрок. Это дало бы вам разные алгоритмы. Это также может зависеть от того, нужна ли вам позиция или проверка того, что символ (или набор символов) присутствует/отсутствует в строке. Обычный поиск символов — это просто линейное сканирование. Поиск подстроки должен пропускать части строки после неудачного совпадения и, таким образом, получать ускорение (я не помню имен, которым приписывается эта оптимизация, но это довольно очевидная идея)
- person Arioch 'The   schedule 02.10.2012
comment
По сути, если у вас действительно критическая скорость, вам лучше взглянуть на более широкую картину и подумать, соответствует ли функция Pos вашим потребностям или вы неправильно ее используете.
- person Arioch 'The   schedule 02.10.2012
Ответы (1)
Да. Функция PosEx
взята из FastCode и работает намного быстрее по сравнению с System.Pos. Он находится в модуле StrUtils.
person
Linas
schedule
01.10.2012
Если PosEx намного быстрее, чем System.Pos, как вы объясните эту реализацию:
Result := System.Pos(SubStr, S, Offset);
- person Uwe Raabe; 01.10.2012
@UweRaabe - так они понизили его или изменили
System.Pos
и сделали PosEx
оберткой? У меня нет XE2, чтобы проверить себя.
- person Leonardo Herrera; 01.10.2012
@LeonardoHerrera, на самом деле это в XE3 (вы действительно запутаетесь, когда у вас открыто более одной IDE). В XE3 System.Pos взят из FastCode (по крайней мере, для 32-разрядной версии).
- person Uwe Raabe; 01.10.2012