Главная страница
    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
11-75134
Юрий
2003-04-08 19:06
2003.12.23
Модальная форма


14-75334
Undert
2003-11-30 21:40
2003.12.23
Заполнение


3-75092
digester
2003-11-30 13:09
2003.12.23
ПОМОГИТЕ Пожалуйста с IBQUERY


14-75396
Думкин
2003-11-28 05:29
2003.12.23
С днем рождения! 28 ноября.


1-75189
Михаил
2003-12-11 14:17
2003.12.23
Tmemo





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский