Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
Аболтус   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
3-91625
Step[B.M.]
2003-06-28 09:29
2003.07.28
Хранимая процедура для InterBase. Help.


6-91804
BlackIce
2003-05-16 16:23
2003.07.28
webbrowser.....как скопировать из него html-код ???


3-91654
??
2003-07-05 18:57
2003.07.28
почему не удаётся подсоединить несколько клиентов???


6-91798
Zyx/2
2003-05-23 12:11
2003.07.28
Nazatija na knopki, zapisj v fomu i t.d. na web-stranicah


6-91785
Ragazor
2003-05-20 15:45
2003.07.28
Кодировка текста для отправки СМС





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