Главная страница
    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.012 c
4-75444
Shaman O Mega
2003-10-29 16:01
2003.12.23
Semaphore vs Mutex


7-75419
Новичок
2003-10-16 09:12
2003.12.23
Печать в Делфи


14-75357
Style
2003-11-28 20:46
2003.12.23
Как часто вы смотрете на клавиатуру?? :)


1-75243
Павел ...
2003-12-10 16:29
2003.12.23
TStringList.CustomSort();


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