Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.033 c
14-1103343805
Думкин
2004-12-18 07:23
2005.01.09
С днем рождения! 18 декабря


14-1103574561
Cobalt
2004-12-20 23:29
2005.01.09
МТС - сбой?


9-1085626647
Kair
2004-05-27 06:57
2005.01.09
GLScene


11-1084528305
dimon1979
2004-05-14 13:51
2005.01.09
Табуляция


1-1103785522
Jeka
2004-12-23 10:05
2005.01.09
Вопрос по настройке D2005





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