Суббота, 18.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Разные » Обзор Delphi

Delphi 2007 (часть II - строковые функции)

Тема

В Delphi 2007 оптимизированы следующие строковые функции:

  1. UpperCase
  2. LowerCase
  3. CompareStr
  4. StrLen
  5. _LStrCmp

Мои исследования

Т.к. я чаще всего пользуюсь сравнением строк (оператор стравнения), то мне наиболее интересно было посмотреть разницу выполнения функции _LStrCmp (именно она в конце концов вызывается при сравнении двух строк if S1 = S2 then ...).

Построив свой первый тест производительности я был удивлен (огорчен), что в BDS 2006 и Delphi 2007 выполнение теста сопостовимо по времени.

Тут я подумал, что не может быть такого - процедуру переписали (вроде это кто-то делал из проекта fastcode - точно я не в курсе ибо не интересуюсь данным проектом), а скорость примерно та же.

Поэтому я полез в исходники и обнаружил, что оптимизация проведена для определенных случаев. Скорость выполнение операции сравнения строк повысилась в случае:

  1. Сравнения строк, если одна (или обе) из них пустая.
  2. Сравнение строк, которые отличаются первым символом.

Я построил еще один тест. Суть теста 10^9 сравнений случайных строк длины 10 со случайной строкой такой же длины.

{$o+}{$r-}{$q-}
program StringFunctionsTest3;
{$APPTYPE CONSOLE}
uses
 SysUtils, Windows;
const
 cLen = 1000000;
 cStrLen = 10;
 cTests = 1000;
var
 I,J: Integer;
 A: array [0..cLen-1] of String;
 PF, PC1, PC2: TLargeInteger;
 S: String;
begin
 QueryPerformanceFrequency(PF);
 for I := 0 to cLen - 1 do
 begin
 A[I] := '';
 for J := 0 to cStrLen-1 do
 A[I] := A[I]+Chr(32+Random(60));
 end;
 S := A[cLen-1];
 QueryPerformanceCounter(PC1);
 for J := 0 to cTests - 1 do
 for I := 0 to cLen - 1 do
 if A[I] = S then
 Break;
 QueryPerformanceCounter(PC2);
 WriteLn(Format('%.4f', [(PC2-PC1)/PF]));
 ReadLn;
end.

По результатам проверки в BDS 2006 и Delphi 2007 обнаружено ускорение от 30% до 50%.

Также я провел замеры скорости выполнения при сравнении строк, когда одна из них пустая. Также обнаружено ускорение от 30% до 50%.

Данная доработка не может не радовать ибо, во-первых, среда в целом будет работать быстрее, во-вторых, наши с вами программы будут работать быстрее.

Получить ссылку на материал

Категория: Обзор Delphi | Добавил: Барон (07.12.2011)
Просмотров: 978 | Теги: UpperCase, _LStrCmp, Функции, StrLen, CompareStr, LowerCase | Рейтинг: 0.0/0
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
Delphi.NET [3]
Kylix Delphi for Linux [9]
Советы Дельферу [6]
Хитрости в Delphi [2]
Обзор Delphi [45]
Инсталлятор [11]
Пользовательский интерфейс [18]
Примеры Delphi [93]
Функции и процедуры [15]
Разные [31]
Королевство Delphi © 2010-2024
Яндекс цитирования