Форум: "Начинающим";
Текущий архив: 2010.12.05;
Скачать: [xml.tar.bz2];
ВнизЗамерять время выполнения процедуры в мс. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c