Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.01.2009, 22:37   #1
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
Счастье Как определить время работы процедуры или операции?

Меня интересует вопрос - как проверить время работы процедуры? Например, есть процедура - Button1.Click или Form1.Create. Как понять сколько времени эта процедура выполняется?
Или есть, например, цикл:
Код:
a:=0;
for i:= 0 to 100 do 
a:= a+1;
Как вывести его время работы?
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 14.01.2009, 23:18   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Roof Посмотреть сообщение
Меня интересует вопрос - как проверить время работы процедуры? Например, есть процедура - Button1.Click или Form1.Create. Как понять сколько времени эта процедура выполняется?
Или есть, например, цикл:
Код:
a:=0;
for i:= 0 to 100 do 
a:= a+1;
Как вывести его время работы?
сначала - k: DWord; k := GetTickCount;
... работа кода...
в конце время работы в мсек = GetTickCount - k; И конечно же разумеется, что это не точно, т.к. на присвоение и вычитание GetTickCount уйдет несколько тактов :D
BOBAH13 вне форума Ответить с цитированием
Старый 15.01.2009, 08:28   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Дополню.
Для маленьких процедур (как в примере) можно использовать RDTSC

Код:
function RDTSC: int64; assembler;
asm
  //RDTSC
  db $0F,$31 
end;

//...
begin
   T := RDTSC;

   a:=0;
   for i:= 0 to 100 do
   a:= a+1;

   writeln(RDTSC-T);
alexBlack вне форума Ответить с цитированием
Старый 15.01.2009, 09:17   #4
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

Код:
QueryPerformanceFrequency()
QueryPerformanceCounter()
+F1
ViktorXP вне форума Ответить с цитированием
Старый 15.01.2009, 10:20   #5
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если я не ошибаюсь, то функция QueryPerformanceCounter() как раз юзает инструкцию rdtsc
rpy3uH вне форума Ответить с цитированием
Старый 15.01.2009, 20:47   #6
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

да врятли.
1) там чето через sysenter выполняется(теслтилось на Vista, на 2000 и ниже этой инструкцыи нет). а это уже територия нулевого кольца и посмотреть токо через софт айс можно а его влом ставить. (а смысл запихать RDTSC в режим ядра никакого не вижу, посему делаю вывод что там чето другое. хотя.....)
2) результаты выдают разные

Последний раз редактировалось ViktorXP; 15.01.2009 в 20:54.
ViktorXP вне форума Ответить с цитированием
Старый 17.01.2009, 22:19   #7
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
Лампочка

Game Timing and Multicore Processors
Цитата:
Due to the limitations of RDTSC, the Windows API exposes the more correct way to access this functionality through the routines of QueryPerformanceCounter and QueryPerformanceFrequency. This use of RDTSC for timing suffers from three fundamental issues:
1. Discontinuous values. Using RDTSC directly assumes that the thread is always running on the same processor.
.......
2. Availability of dedicated hardware.
.......
3. Variability of the CPU's frequency.
.......
Somebody вне форума Ответить с цитированием
Старый 18.01.2009, 21:56   #8
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

вопрос вобщем разъяснен. Спасибо.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать время работы программы в паскаль? bullvinkle Помощь студентам 2 26.12.2008 11:20
Как узнать создана ли форма во время работы приложения? Avalonix Общие вопросы Delphi 4 31.05.2008 21:01
Время процедуры AngelOfDeath Общие вопросы Delphi 11 29.04.2008 15:26
Время работы WINDOWS В_И_К_Т_О_Р Помощь студентам 8 30.01.2008 12:42
Время работы сортировок Боня Помощь студентам 1 10.02.2007 17:53