Тестирование.Анализ времени выполнения
Часто возникает необходимость измерения времени выполнения какой-либо части кода. В классе Tests для этого предусмотрены счетчики времени.

Вы можете использовать столько счетчиков, сколько Вам необходимо. Для каждого счетчика должно быть задано уникальное имя. Для инициализации счетчика нужно вызвать метод tests.time и передать ему имя счетчика. Следующий вызов метода test.viewtime с тем-же именем запишет в log-файл время между этими вызовами. Например:

pascal
procedure TMyClass.test_method8;
begin 
   tests.time('test1');
   asm
      mov  eax, 10
      mov  ebx, 5
      div  eax, ebx
   end;
   tests.viewtime('test1');

   tests.time('test2');
   sleep(2);
   tests.viewtime('test2');
end;

output
 13.05.2010 21:06 Message : TMyClass.test_method8
                  --------: test1 time: 0,66mk
                  --------: test2 time: 2,06ms

Время отображается в зависимости от его величины в микросекундах, миллисекундах, секундах или в формате hh:mm:ss.

После вызова viewtime значение счетчика фиксируется и последующие вызовы будут возвращать одно и то-же значение. Счетчик можно использовать повторно инициализовав его еще раз.

obsolette
Ранее для измерения времени предлагался метод ViewElapsedTime. Теперь этот вызов считается устаревшим и помечен в описании как deprecated.

Вызов этого метода сохраняет в файл строку с информацией о прошедшем времени с момента последнего вызова этого метода.

Например:

pascal
procedure TMyClass.test_method5;
begin
   tests.ViewElapsedTime;
   sleep(123);
   tests.ViewElapsedTime;
end;

output
 18.06.2009 14:19 Message : TMyClass.test_method5
                  --------: time(sec/tick) :      0,000 10290
                  --------: time(sec/tick) :      0,125 347773209

Как видите, сохранены два значения - первое с момента начала теста до первого вызова ViewElapsedTimeб второе - время между вызовами.

Время показывается сразу в двух форматах - в секундах и как значение, возвращаемое функцией RDTSC. Это позволяет оценить время как коротких, так и длинных операций.

Время выполнения тестирующего метода сохраняется в файл автоматически (если оно больше одной секунды). (Тестирование.Анализ)

Для измерения времени модуль экспортирует следующие функции:

pascal
 function RDTSC : int64;
Это вызов одноименной инструкции процессора, возвращающей внутренний счетчик.

pascal
 function _TickCount : Double; 
Возвращает текущее время в микросекундах. Функция основана на вызове QueryPerformanceCounter. Соответственно ее точность определяется точностью этого счетчика.

Copyright © 2009-2014 by