Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


ZV ©   (2010-09-14 10:59:00) 

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

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


Anatoly Podgoretsky   (2010-09-14 15:42:00) [1]

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


Anatoly Podgoretsky   (2010-09-14 15:41:00) [2]

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

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


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


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

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


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

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

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


ZV   (2010-09-14 14:07:00) [5]

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


ZV   (2010-09-14 13:29:00) [6]


> Anatoly Podgoretsky

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


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

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

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


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


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

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


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

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

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


Anatoly Podgoretsky   (2010-09-14 12:56:00) [10]

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

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


Anatoly Podgoretsky   (2010-09-14 12:54:00) [11]

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


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


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

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


brother   (2010-09-14 12:28:00) [13]

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

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


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

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


Anatoly Podgoretsky   (2010-09-14 12:26:00) [15]

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


Anatoly Podgoretsky   (2010-09-14 12:24:00) [16]

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

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


12   (2010-09-14 12:13:00) [17]

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


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

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

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


Jeer   (2010-09-14 11:10:00) [19]


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


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


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


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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо