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

Вниз

Рекурсия или цикл!?   Найти похожие ветки 

 
Аболтус ©   (2003-02-02 23:55) [0]

вот эт снова я с глупыми вопросами :)))
Скажите мне пожалуста какой способ быстрее попиксельно выводит на канвас картинку в цикле или рекурсивно?
И еще почему то не получаеться посчитать скока времени уходит на выполнение процедуры т.е.
GetTickCount
Procedure
GetTickCount
потом вычитаю значения и получаю 0


 
Sha ©   (2003-02-03 00:07) [1]

Цикл обычно быстрее рекурсии.
GetTickCount дает текущий тик таймера. Поэтому для быстрых процедур всегда будешь получать 0 (один и тот же тик) или 1 (соседние тики).
Используй GetCPUTick, который дает тики процессора:

function GetCPUTick: int64; assembler;
asm
db 0fh,31h; //rdtsc
end;


 
Аболтус ©   (2003-02-03 00:28) [2]

Ну по поводу рекурсии надо учесть следующий момент: рекурсии надо обработать меньшее количество пикселов


 
Asteroid ©   (2003-02-03 00:44) [3]

Проще циклом. Быстрее - рисовать попиксельно на канву в памяти, а ее рисовать на настоящую.
В зависимости от алгоритма рекурсии и размеров канвы, может появиться Stack overflow.


 
Аболтус ©   (2003-02-03 01:04) [4]

К вопросу о переполнении стека как от него избавиться?


 
Аболтус ©   (2003-02-03 01:14) [5]

И почему Блок:
try
except
не обрабатывает EStackOverflow ?


 
Ketmar ©   (2003-02-03 10:44) [6]

2Аболтус:
упрощать алгоритм и учить матчасть.

Satanas Nobiscum! 03-Feb-XXXVIII A.S.


 
Mirovodin ©   (2003-02-03 11:26) [7]

Рекурсия дольше по тому, что перед вызовом процедуры, Delphi сохраняет регистры (Push, Pop) т.е. на каждый вызов делаются дополнительные команды процессора.


 
Darthman   (2003-02-03 11:45) [8]

>>function GetCPUTick: int64; assembler;
>>asm
>> db 0fh,31h; //rdtsc
>>end;

Как с помощью этой функции время-то получить? Эта функция только количество тиков проца даст с момента последнего сброса.


 
Anatoly Podgoretsky ©   (2003-02-03 12:36) [9]

Аболтус © (03.02.03 01:04)
Не использовать глубокую рекурсию


 
Sha ©   (2003-02-03 14:45) [10]

> Darthman (03.02.03 11:45)
> Как с помощью этой функции время-то получить?
var
t: int64;
t:=GetCPUTick;
..твой блок..
t:=GetCPUTick-13;
После этих операций в t сидит количество тиков процессора, потраченных на выполнение твоего блока. 13 - это количество тиков, потраченных на выполнение самой функции (на моем проце).
Информация к размышлению: за 1 сек процессор делает столько тиков, какова его истинная частота, например, 1ГГц = 1000000000 тиков. Дальше думай сам.


 
Sha ©   (2003-02-03 14:46) [11]

Поправка:
var
t: int64;
t:=GetCPUTick;
..твой блок..
t:=GetCPUTick-t-13;


 
Darthman   (2003-02-03 14:55) [12]

Не, ну это я понял. Тоесть а как ты предлагаешь вычислять кол-во тиков затрачиваемых на выполнение операции процом?


 
Sha ©   (2003-02-03 15:04) [13]

2 Darthman (03.02.03 14:55)
Если проц 1ГГц, то дели t на 1000000000 :)


 
Sha ©   (2003-02-03 15:26) [14]

Sha © (03.02.03 15:04)
2 Darthman (03.02.03 14:55)
В догонку.
Время в тиках проца будет сидеть в t.
Если проц 1ГГц, то дели t на 1000 - время в usec
Если проц 1ГГц, то дели t на 1000000 - время в msec
Если проц 1ГГц, то дели t на 1000000000 - время в sec



 
Mirovodin ©   (2003-02-03 15:27) [15]

Только нужно учесть, что это кол-во тактов процессора в общем, а не в твоем конкретном приложении (куске кода). Грубо говоря результаты будут разные в случаях :
а) работает только твой процесс.
б) в фоне работает ресурсоемкий процесс + твой.


 
Sha ©   (2003-02-03 15:40) [16]

Причем, даже если в параллель и не работает другой процесс, все равно надо сделать несколько замеров и выбрать минимальный - он ближе всех цели. Спасибо Билли.



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

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

Наверх




Память: 0.5 MB
Время: 0.014 c
14-91911
zeratul_pr
2003-07-11 23:19
2003.07.28
Компоненты


11-91698
IZVER
2002-11-18 08:42
2003.07.28
Сокеты, прокси....


14-91906
panov
2003-07-12 17:35
2003.07.28
Сообщение App и Marser


1-91726
LKJJ
2003-07-14 14:36
2003.07.28
Как сделать полупрозрачную форму?


14-91902
Чижик Пыжик
2003-07-11 22:48
2003.07.28
Разные сайты под одним IP адресом