Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Какая комбинация быстрее


Anton ©   (2003-01-27 15:25:00) 

if UpperCase(Name)="OD" then a:=1;
if UpperCase(Name)="RC" then a:=2;
if UpperCase(Name)="OA" then a:=3;

или

if (Name="OD") or (Name="od") or (Name="Od") or (Name="oD") then a:=1;
if (Name="RC") or (Name="rc") or (Name="Rc") or (Name="rC") then a:=2;
if (Name="OA") or (Name="oa") or (Name="Oa") or (Name="oA") then a:=3;


han_malign   (2003-01-27 16:34:00) [1]

((Length(Name)=2) and (Name[1]in["O","o"])and(Name[2]in["D","d"]))

а можно и так:
var _name: shortstring;
begin
_name:=Uppercase(Name)+#0;
case dword(_name[0]) of
$00444F03{OD}: a=1;
$00524303{RC}: a=2;
$00414F03{OA}: a=3;
end;{case}
:)))))))


Anton   (2003-01-27 16:09:00) [2]

да я немножко ошибся


Anatoly Podgoretsky   (2003-01-27 16:00:00) [3]

Приведи код теста, явно не хорошо сделан.


Anatoly Podgoretsky   (2003-01-27 15:57:00) [4]

Что это за измерение, цикл надо увеличить хотя бы в 100 раз
Name должен быть хотя бы "OA", а лучше "хх"

Код совсем не оптимальный, надо использовать else if


Anton   (2003-01-27 15:47:00) [5]

публикую результаты измерений
начало 1 блока0,655696608796296
конец 1 блока0,655697152777778
начало 2 блока0,655697152777778
конец 2 блока0,655697870370371
отсюда вывод 1 вариант быстрее в 1.3 раза


Юрий Зотов   (2003-01-27 15:44:00) [6]

Заодно проверьте и такой вариант.

const
Pattern = "ODRCOA";
var
P: integer;
begin
if Length(Name) = 2 then
begin
P := Pos(UpperCase(Name), Pattern);
if P in [1, 3, 5] then A := (P + 1) shr 2
end
end;


Anatoly Podgoretsky   (2003-01-27 15:36:00) [7]

А еще серьезнее


gek   (2003-01-27 15:33:00) [8]

В принципе
это зависит от второго выражения
т.е. максимум проверок там 4, а минимум 1 в одной строке.

В первом случае два действия: Upper и проверка на равенство


bis   (2003-01-27 15:31:00) [9]

еще быстрее посимвольно разветвлять и даже через case


Anatoly Podgoretsky   (2003-01-27 15:30:00) [10]

Секундомер у тебя есть?


Anton   (2003-01-27 15:30:00) [11]

Я серьезно


MBo   (2003-01-27 15:29:00) [12]

прогони 100000 раз в цикле, и узнаешь


Наверх

Титульная страница Поиск, карта сайта Написать письмо