Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

Пара вопросов к мастерам:   Найти похожие ветки 

 
Vasya.ru ©   (2004-12-17 22:50) [0]

Пишу программку на билдере, требующую очень много времени на исполнение, в связи с чем возникло несколько вопросов:
1. Структурный код vs объектный - что быстрее?
2. Работа с файлом стандартными средствами С vs с использованием ifstream, ofstream - что быстрее?
3. Многократная запись строк в фаил vs запись в стринглист + SaveToFile - что быстрее? (примерно 11! строк)
И еще - большой ли выигрыш по времени дает использование базовых типов переменных, и замена цикла for на while? (стоит ли менять?)
И последнее - что быстрее будет работать - строки из классического С или String из VCL?


 
KSergey ©   (2004-12-18 09:12) [1]

А еще есть сложность поддержки и расширения программы. Подумайте лучше об этом.


 
Vasya.ru ©   (2004-12-18 10:51) [2]

KSergey ©   (18.12.04 9:12) [1][Ответить]
программа не такая уж и большая, к тому же код не очень сложный, главная проблема - время выполнения


 
TUser ©   (2004-12-18 12:34) [3]

1. Структурный бытрее. Обычно. Вот здесь обратный пример - уменьшаем количество фактов перераспределения памяти - скорость растет. Изначально это было сделано на основе record, т.е. чисто структурно, но с ООП быстрее.
http://delphimaster.net/view/1-1103285802/
В целом record создается и уничтожается в очень много раз быстрее, чем объект.
2. Стримы в сто раз быстрее. (стандартные средства - это я понимаю, writeln/readln).
3. Стринглист быстрее, он через стримы работает. Если знак ! - не опечатка, то это может быть важно.
И еще - замена for на while дает проигрыш в скорости, т.к. в цикле for максимальное (минимальное при downto) значение счетчика вычисляется только один раз, а в while - на каждой итерации.


 
KSergey ©   (2004-12-18 12:47) [4]

> [3] TUser ©   (18.12.04 12:34)
> И еще - замена for на while дает проигрыш в скорости, т.к.

Вы не забыли углядеть, что он про Си спрашивает? Я вообще как-то не очень уверен, что там есть между ними разница...


 
ASMer   (2004-12-18 12:54) [5]

1. Все зависит он написателя и от кода
2. Пох...
3. SaveToFile

1. Иши другие места для оптимизации...
2. Пиши на ASM"е

А вообще время программиста стоит дороже чем время работы машины


 
TUser ©   (2004-12-18 13:32) [6]


> KSergey ©   (18.12.04 12:47) [4]

Судя по CPU window вы правы.


 
Vasya.ru ©   (2004-12-18 13:37) [7]

TUser ©   (18.12.04 12:34) [3]
И еще - замена for на while дает проигрыш в скорости

уточню: стоит ли заменять по мере возможности for на цикл с постусловием - вроде как один такт процессора экономится?


 
ASMer   (2004-12-18 13:37) [8]

CPU Windwo - CPU Window

Можно на на OpenGL+CPP написать програмуоину которая жрать будет
100% ресуров компа и при этом вывлдить одну грань. А можно такую же ну жрущую 1-3% процента. При этом различаються эти програмулины будут всего в 3 строках.

Так что CPU мля виндоу. Это не показатель оценки скорости исполнения


 
Igorek ©   (2004-12-18 13:38) [9]

Vasya.ru ©   (17.12.04 22:50)
Ты это, лучше алгоритм оптимизируй, если есть куда.


 
KSergey ©   (2004-12-18 14:00) [10]

> [6] TUser ©   (18.12.04 13:32)
> Судя по CPU window вы правы.

Долго въезжал о чем это.. ;)
В принципе  можно и не смотреть. for в Си - это совсем не For в дельфи и бейсике ;)
Мне вообще не очень понятно зачем в Си нужен while: вроде for его полностью покрывает...

> [7] Vasya.ru ©   (18.12.04 13:37)
> уточню: стоит ли заменять по мере возможности for на цикл
> с постусловием - вроде как один такт процессора экономится?

Погодите, это от задачи, от алгоритма зависит: если вам необходимо постусловие - славно, используйте, если предусловие (или как это грамотно) -тогда его. В общем случае они отнюдь не взаимозаменяемы...

А вообще [9] Igorek ©   (18.12.04 13:38) безусловно прав: оптимизацией тактов нифига выигрыша не получить. Ну там 5..15%, например. А вот если применить алгоритм, выполняющий ту же задачу на порядок быстрее - вот это уже да, интересно ;)


 
TUser ©   (2004-12-18 14:31) [11]


> Vasya.ru ©   (18.12.04 13:37) [7]
> TUser ©   (18.12.04 12:34) [3]
> И еще - замена for на while дает проигрыш в скорости
> уточню: стоит ли заменять по мере возможности for на цикл
> с постусловием - вроде как один такт процессора экономится?

Почитайте переписку с KSergey"ем. Я, действительно, сначала не обратил внимание на то, что речь о билдере. А код для for и while там генерируется идентичный.

Отражу свое особое мнение об ускорении программ такими методами (если бы речь шла о паскале, например). Если скорость работы программы не критична - то и плюнуть на это. Если критична - тогда это не те способы, которыми ее надо разгонять. Допустим, я неправильно составил алгоритм, например, перебираю чего-нибудь и пишу
i:=0;
while (i <= <calculated expression>) do begin
{any simple action}
ProgressBar1.Position:=(i*100) mod <calculated expression>;
Application.ProcessMessages;
end;
В каждом цикле выражение вычисляется 2 раза. Однако, даже если заменить while на for, то особого ускорения мы не получим, т.к. программа занята не полезной работой, а рисованием прогрессбара. Так что все такие штуки - это не путь для ускорения программы.
Вот живой пример, - написал как-то код, что-то типа
while not eof(f) do begin
readln(s);
{do something}
end;
Тормозило. Заменил на
SL.LoadFromFile();
for i:=0 to SL.Count-1 do begin
{do something}
end;
Теперь не тормозит. Но все дело, конечно, не в замене while -> for, а в более рациональном меоде работы с файлом.



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

Текущий архив: 2005.01.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.025 c
1-1103636003
Kat
2004-12-21 16:33
2005.01.09
Есть ли разница в быстродействии и доступе, если поле


3-1102496556
chum
2004-12-08 12:02
2005.01.09
Использование Ado


14-1103687945
Чеширский_Кот
2004-12-22 06:59
2005.01.09
Нет ничего хуже ремонта!


1-1103703634
Симонова Ирина
2004-12-22 11:20
2005.01.09
AcrobatReader


6-1098296927
papage
2004-10-20 22:28
2005.01.09
TIDHTTPSERVER, как слить файл