Форум: "Потрепаться";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
ВнизПара вопросов к мастерам: Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c