Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Ускорение работы функции `Pos()` в 64-битной версии Delphi: сравнение с 32-битной и альтернативные методы

Delphi , Базы данных , Поиск

Ускорение работы функции Pos() в 64-битной версии Delphi

Вопрос о скорости работы функции Pos() в 64-битной версии Delphi актуален для разработчиков, сталкивающихся с необходимостью оптимизации производительности приложений. Вопрос пользователя заключался в поиске кода для версии Pos(), которая была бы такой же быстрой в 64-битной среде, как и в 32-битной.

Проблема

В 32-битной версии Delphi с версии XE5 используется ускоренная версия Pos() с помощью ассемблера FastCode, которая значительно быстрее, чем версия на PurePascal. В 64-битной версии используется именно такая, медленная версия PurePascal, что приводит к заметному увеличению времени выполнения операций.

Анализ

Тесты, проведенные пользователем, показали, что в цикле с большим количеством итераций:

  • В 32-битной версии время выполнения составляло 65-90 мс.
  • В 64-битной версии время выполнения увеличивалось до 280-300 мс.

Альтернативные ответы

Пользователи предлагали различные альтернативы, включая использование функции wcsstr из библиотеки msvcrt.dll, которая показала себя лучше, чем стандартная Pos() в 64-битной среде. Однако, после дополнительных тестов, было установлено, что алгоритм PosEx_Sha_Pas_2 от Fastcoders может быть более эффективным.

Подтвержденный ответ

Использование алгоритма PosEx_Sha_Pas_2 от Fastcoders в PurePascal позволяет добиться ускорения работы функции Pos() в 64-битной версии Delphi. Пример кода алгоритма представлен ниже:

function PosEx_Sha_Pas_2(const SubStr, S: string; Offset: Integer = 1): Integer;
// Код алгоритма PosEx_Sha_Pas_2
end;

Тестирование алгоритма на 64-битной версии показало следующие результаты:

  • System.Pos - 18427 мс
  • wcsstr - 8122 мс
  • PosEx_Sha_Pas_2 - 2282 мс

Для 32-битной версии результаты были следующими:

  • System.Pos - 2171 мс
  • wcsstr - 9634 мс
  • PosEx_Sha_Pas_2 - 1868 мс

Выводы

Алгоритм PosEx_Sha_Pas_2 в 64-битной версии работает почти так же быстро, как Pos в 32-битной версии, и даже быстрее в некоторых случаях. С версии Delphi 11.0 Alexandria стандартная версия Pos() в PurePascal использует именно этот алгоритм.

Заключение

Для улучшения производительности работы со строками в 64-битной версии Delphi рекомендуется использовать функцию PosEx_Sha_Pas_2. Это позволит приблизиться к скорости работы Pos() в 32-битной версии и даже превзойти её в некоторых сценариях использования.

Создано по материалам из источника по ссылке.

Ускорение работы функции `Pos()` в 64-битной версии Delphi достигается за счет использования оптимизированного алгоритма, который приближает производительность к уровню 32-битной версии.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Поиск ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-22 08:49:04/0.0057899951934814/1