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

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

Как оптимизировать код? [D7, XP]


tytus ©   (2008-06-06 16:47:00) 

Доброго дня мастера. Есть ткакой код

for i:=0 to 281 do
if ((j>=156)and(j<=211))or((j>=226)and(j<=281))then


как можно его оптимизировать, чтобы получить макс. быстродействие программы?


Игорь Шевченко   (2008-06-06 19:32:00) [1]


> Просто когда-то читал, что операторы перехода по условию
> требуют много  времени на обработку.


Это ты не то читал


tytus   (2008-06-06 17:23:00) [2]

>SergeyIT ©   (06.06.08 17:16) [9]
да вроде не перепутал.
Ладно, спасибо всем.
Действительно, нужно разбивать сложные цыклы
на более простые.

SergeyIT ©   (06.06.08 17:16) [9]
жрет гораздо больше процессорного времени?

да нет, код простенький.
Просто когда-то читал, что операторы перехода по условию
требуют много  времени на обработку.
имхо tytus   (06.06.08 17:06) [5]- должен решить проблему.
Вместо 282 операторов if, выполнится всего 3
(без учета while).


SergeyIT   (2008-06-06 17:16:00) [3]

А может
//выполняем код и т.д.
жрет гораздо больше процессорного времени? Тогда циклы оптимизировать особого смысла не имеет.
Опять перепутали if i while?


tytus   (2008-06-06 17:12:00) [4]

>Palladin ©   (06.06.08 17:09) [6]
тоже вариант. тогда на 4 цыкла
1)от 0..155
2)от 156..211
3)от 212..225
4)от 226 до 281


Palladin   (2008-06-06 17:09:00) [5]


> tytus   (06.06.08 17:06) [5]

а на три цикла с разными диапазонами религия не позволяет разбить?


tytus   (2008-06-06 17:09:00) [6]

>SergeyIT ©   (06.06.08 17:05) [4]
да, опечатка, должно быть i


tytus   (2008-06-06 17:06:00) [7]

этот код может вызываться 100 000 раз.
и нужно именно от 0 до 281.
i:=0;
while i<281 do
begin
 if i=156 then
 while i<=211 do
 begin
   //выполняем код
   inc(i);
 end else
 if i=226 then
 while i<281 do
 begin
   //выполняем другой код
   inc(i);
 end else begin
    //выполняем исче однин код
    inc(i);
 end;
end;


SergeyIT   (2008-06-06 17:05:00) [8]

Не понятно - i и j это опечатка или разные переменные?


LightRipple   (2008-06-06 17:00:00) [9]

> [0] tytus   (06.06.08 16:47)
> Доброго дня мастера. Есть ткакой код

Вычислить значение ((j>=156)and(j<=211))or((j>=226)and(j<=281))
до цикла, а не пересчитывать его 282 раза :)


Anatoly Podgoretsky   (2008-06-06 16:58:00) [10]

> tytus  (06.06.2008 16:47:00)  [0]

for i:=156 to 281 do


Ega23   (2008-06-06 16:52:00) [11]

а чем не нравится-то?


Наверх

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