Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];

Вниз

Стоит ли разбивать циклы в критичных случаях?   Найти похожие ветки 

 
Makhanev A.S.   (2003-12-09 00:30) [0]

Есть ли большая разница в производитеьснити между:

for i := 0 to 100 do
begin
A(i);
B(i);
end;


и

for i := 0 to 100 do
begin
A(i);
end;
for j := 0 to 100 do
begin
A(j);
end;


Вызовы A и B зотелось бы разделить.
этот цикл (первый) вызывается постоянно, т.к. программа всё время висит в памяти и кое-что делает.
Цикл A и B занимают относительно много времени.

Каковы будут (если будут) потери от разделения исходного цикла на 2?


 
Германн   (2003-12-09 03:04) [1]

Лучше всего - экспериментировать самому. Твоя задача - тебе и знать ее и решать, что лучше. А общих ответов, имхо, тут врядли есть.


 
SkyRanger   (2003-12-09 03:08) [2]

Скорость упадет вдвое...
А вообще лучьше используй

while I<=100 and J<=100 do
begin
A(I);
B(J);
Inc(I);
Inc(J);
end;


Причем можешь увеличивать и ученьшать переменные так как тебе надо и если I достигнет конца, то пока J не достигнет конца...


 
Юрий Зотов   (2003-12-09 09:01) [3]

> SkyRanger © (09.12.03 03:08) [2]

Насчет "скорость упадет вдвое" - это, пожалуй, поспешно.

Насчет совета заменить for на while - если нужно замедлить программу, то это хороший совет.

Насчет двух параметров цикла (i и j) вместо реально нужного одного - а почему уж тогда сразу не пять?

> Makhanev A.S.

1. Цикл for - самый быстрый по сравнению c while и repeat, особенно при включенной оптимизации. Стоит иметь это в виду.

2. Вариант с двумя циклами медленнее, потому что в двух циклах служебных операций больше, чем в одном (если только оптимизирующий компилятор не окажется настолько умным, что все равно объединит два цикла в один). Но реально основную часть времени займет выполнение A и B, поэтому вряд ли разница будет заметной.


 
Makhanev A.S.   (2003-12-10 01:02) [4]


> Юрий Зотов © (09.12.03 09:01) [3]

Я сильно упростил вопрос.
Просто стояла дилемма: по уму разбить цикл и потерять некий n производительсности - или не разбивать цикл и приобрести n производительности + пару вопросов в другой части программы.

Весь вопрос собственно в измерении этого n.
Чтож, думаю, что лучше безопасный код.
Попробую разбить.

Всем спасибо!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
7-75412
miek
2003-10-17 19:13
2003.12.23
секрет DOS


3-75124
Саша
2003-11-26 12:25
2003.12.23
Проблемы с DBExpress


1-75155
с13
2003-12-07 09:08
2003.12.23
Scroll Bar


1-75264
Petrovich
2003-12-09 17:25
2003.12.23
Delphi+Word (разбивка текста на несколько колонок)


1-75259
selena
2003-12-10 08:11
2003.12.23
кодировка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский