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

Вниз

Замерять время выполнения процедуры в мс.   Найти похожие ветки 

 
ZV ©   (2010-09-14 10:59) [0]

Задача такая, процедура ищет нужные данные в массиве,  хочу, замерять за какое время процедура обработает массив. Надо что то типа такого – вход в процедуру запуск таймера, поиск по массиву, получение результата ,остановка таймера, вывод времени выполнения процедуры.
Что для этого можно использовать? Таймер, выставить переполнение 1мс и по событию увеличивать переменную. Потом посмотреть её значения.

Или для такой задачи используются другие методы?
И ещё к этому один вопрос.
Программа  по Ethernet передает пакет и получает ответ, сейчас для определения времени я использую TimeToStr(Time) но в этой функции максимальное разрешение в секундах, как сделать ,  что бы я видел минуты, секунды, миллисекунды.


 
Сергей М. ©   (2010-09-14 11:05) [1]


> как сделать ,  что бы я видел минуты, секунды, миллисекунды


Использовать FormatDateTime() вместо TimeToStr()


 
Jeer ©   (2010-09-14 11:10) [2]


> хочу, замерять за какое время процедура обработает массив


1. GetTickCount - если достаточно разрешения 10-20 мс
2. QueryPerfomanceCounter
3. RDTSC


 
И. Павел ©   (2010-09-14 11:51) [3]

> [0] ZV ©   (14.09.10 10:59)

Наверное, точнее и правильнее выполнить функцию много раз, и получить среднее время выполнения функции, поделив общее время на число вызовов. При этом, если нужно, сперва можно случайно сгенерировать входные данные для всех вызовов, чтобы получить усреднение и по ним.


 
12 ©   (2010-09-14 12:13) [4]

Удалено модератором


 
Anatoly Podgoretsky ©   (2010-09-14 12:24) [5]

> ZV  (14.09.2010 10:59:00)  [0]

Не проблема, только таймер не применим, в таймере нет информации о времени,
он не для этого.
Только легче мерить в 100 наносекундных интервалах, чем в миллисекундных -
использовать QueryPerfomanceCounter или еще более точный RDTSC доли
наносекунды.


 
Anatoly Podgoretsky ©   (2010-09-14 12:26) [6]

Посмотреть это не цель, а цель не обозначено. Может вообще потребуются атомные часы.


 
Anatoly Podgoretsky ©   (2010-09-14 12:27) [7]

Ну посмотрел, что 1,5 миллисекнды и что?


 
brother ©   (2010-09-14 12:28) [8]

> Может вообще потребуются атомные часы.

ИМХО, тут GetTickCount подойдет...


 
ZV ©   (2010-09-14 12:54) [9]


> Ну посмотрел, что 1,5 миллисекнды и что?

В общем дело обстоит так- Есть база готовых ответов (массив) процедура ищет в нем  ответ к конкретной задаче. Ответы в в массив поступаю из другого  ПК. Время расчета и ответа другого ПК остается неизменным, константа.  
Так как массив ответов нарастает до определенного уровня то естественно время поиска в нем будет нарастать. Так вот для этого мне и нужен контроль времени поиска в массиве , и когда он превысит время ответа другого ПК, то смысл поиска в массиве отпадает потому что  быстрей быстрей получить ответ от другого ПК чем найти его в массиве


 
Anatoly Podgoretsky ©   (2010-09-14 12:54) [10]

Но автор точно не говорит, если нужна точность в миллисекунд, то пусть забудет с данной функцией.


 
Anatoly Podgoretsky ©   (2010-09-14 12:56) [11]

> ZV  (14.09.2010 12:54:09)  [9]

И сколько этот определенный уровень?


 
И. Павел ©   (2010-09-14 13:01) [12]

> Так как массив ответов нарастает до определенного уровня
> то естественно время поиска в нем будет нарастать.

Можно использовать какие-нибудь методы, ускоряющие поиск. Например двухмерный массив, элемент которого mas["а", "в"] хранит адрес, по которому начинают идти строки "ав*" и т.д., или выбрать что-нибудь еще.


 
ZV ©   (2010-09-14 13:07) [13]


> И сколько этот определенный уровень?

Это максимальное количество  задач.  Максимальный уровень когда в базе есть ответы на вес задачи. Вопрос в что быстрей найти ответ в базе или пускай другой ПК подсчитает и ответит.


 
Anatoly Podgoretsky ©   (2010-09-14 13:26) [14]

> ZV  (14.09.2010 13:07:13)  [13]

Тогда считай 100 ns или hardware тики, никакие тебе милли/микросекунды не
нужны.


 
ZV ©   (2010-09-14 13:29) [15]


> Anatoly Podgoretsky

Спасибо , так и сделаю


 
ZV ©   (2010-09-14 14:07) [16]

Еще забыл спросить. Мне нужно что бы событие произошло допустим в 24.00.
Мне что постоянно проверять  Time пока не будет совпадения? Хотелось бы так- что задал время события и забыл.


 
И. Павел ©   (2010-09-14 14:23) [17]

> Хотелось бы так- что задал время события и забыл.

Можно запланировать запуск программы в 24:00. Можно просто sleep на весь оставшийся интервал до 24 часов - у меня так одна программка работает - ждет 9 часов и запускается довольно точно. А чтобы выполнять во время sleep другие действия, то можно пустить его в отдельном потоке.


 
Плохиш ©   (2010-09-14 14:28) [18]


> А чтобы выполнять во время sleep другие действия, то можно
> пустить его в отдельном потоке.

Там ещё и таймеры есть.


 
Anatoly Podgoretsky ©   (2010-09-14 15:41) [19]

> ZV  (14.09.2010 14:07:16)  [16]

Через три года.


 
Anatoly Podgoretsky ©   (2010-09-14 15:42) [20]

Какое это имеет отношение к времени замера?



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

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

Наверх




Память: 0.51 MB
Время: 0.006 c
2-1284440308
Hadroran
2010-09-14 08:58
2010.12.05
Показ записей по необходимости


2-1284382841
Delphi
2010-09-13 17:00
2010.12.05
Приведение типов в методах TAction


2-1284454081
TThread
2010-09-14 12:48
2010.12.05
Доступ к данным на чтение из разных потоков


2-1284406232
ZV
2010-09-13 23:30
2010.12.05
Проблемы с компонентом TPanel


2-1284444480
ZV
2010-09-14 10:08
2010.12.05
Компонент ListBox