08.12.2009, 10:53 | #1 |
Участник
|
Таймер в милисекундах
Здравствуйте.
Засекаю время работы запроса: QueryTime = timeNow(); select * ........ QueryTime = timeNow()-QueryTime ; Подскажите пожалуйста как получить время в милисекундах? Заранее благодарю...
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
08.12.2009, 11:17 | #2 |
Участник
|
Использовать класс WinAPI
|
|
08.12.2009, 13:19 | #3 |
Участник
|
WinApi::getTickCount();
но учтите, что обновляется примерно 50раз в секунду, если надо точнее импользуйте мультимедия таймер.
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy Последний раз редактировалось ivas; 08.12.2009 в 13:21. |
|
08.12.2009, 17:57 | #4 |
Участник
|
А не правильнее ли использовать профайлер для этих целей?
|
|
08.12.2009, 20:01 | #5 |
Участник
|
А можно узнать практический смысл такой точности измерения? В каких случаях может понадобиться такая точность?
|
|
09.12.2009, 23:55 | #6 |
Участник
|
Можно использовать класс Timer.
Timer timer = new Timer(); ; timer.start(1); select * ........ timer.stop(1); info(strfmt("Время работы %1",time2str(timer.time(1)/1000,0,0))); Правда внутри себя он всё равно использует WinApi::getTickCount(); |
|
10.12.2009, 17:50 | #7 |
Участник
|
В AX 4.0 уже нет класса Timer(), хотя ничто не мешает его перенести из 3.0...
|
|
08.01.2011, 18:33 | #8 |
Участник
|
|
|
09.01.2011, 06:11 | #9 |
Участник
|
Это значит, что он тикает не по 1 мс, а по гдето (из опыта) 16 мс. Тоесть как раз гдето 50 раз в секунду.
Как правило этой точности хвататет за глаза, если же надо замерить операцию которая <16 мс, то можно просто замерить время 100-1000 проходов.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
09.01.2011, 15:20 | #10 |
Участник
|
Цитата:
Похоже внутренние Аксаптовские счетчики в 2009-й версии именно с такой точностью и работают. По крайней мере логирование долгих запросов SQL отображает длительность 15 миллисекунд или 0. |
|
09.01.2011, 18:22 | #11 |
Moderator
|
Для расширения нашего кругозора - про таймеры Windows: http://cprime.110mb.com/lesson/0106/6-1.php
|
|
09.01.2011, 19:00 | #12 |
Участник
|
Цитата:
Сообщение от Gustav
Для расширения нашего кругозора - про таймеры Windows: http://cprime.110mb.com/lesson/0106/6-1.php
Цитата:
Следует учесть, что хотя временные интервалы таймеров задаются в относительно мелких единицах (миллисекундах или даже меньше), реально практически невозможно измерить (или отсчитать) время меньшее, чем 10-20 миллисекунд. Для гарантированного отсчета таких маленьких временных интервалов необходимо писать драйвер. [...] Похоже также, что частота прерываний от таймера в современных версиях Windows больше, чем 18.2 раза в секунду. По крайней мере в Windows 98 и Windows 2000 отличия точно имеются.
Цитата:
/TIMERES=
В системах со стандартной многопроцессорной x86-версией HAL (Halmps.dll) задает разрешение системного таймера. Аргументом является значение в сотнях наносекунд, но частота устанавливается в соответствии с ближайшим меньшим значением, поддерживаемым HAL (см. ниже). Код: Сотни наносекунд Миллисекунды (мс) 9766 0,98 19532 2,00 39063 3,90 78125 7,80 |
|
10.01.2011, 10:18 | #13 |
Участник
|
Вопросик: каким образом в 2009 AX возможно организовать периодическое выполнение функций, по средствам таймера? Если да, то какой класс за это отвечает, заранее благодарен.
|
|
10.01.2011, 11:10 | #14 |
Участник
|
|
|
11.01.2011, 10:31 | #15 |
Участник
|
Спасибо почитал, понял что таймеры мне не подходят, нужно применить пакетную обработку в связи с этим вопрос: как я понял пакетную обработку можно настроить через диалоговое окно класса, программно и из экранной формы "Пакетное Задание", создал класс:
X++: class TransClass extends RunBaseBatch { int a; #define.CurrentVersion(1) #localmacro.CurrentList a #endmacro } X++: public boolean unpack(container packedClass) { Version version = RunBase::getVersion(packedClass); switch(version) { case #CurrentVersion: [version, #CurrentList] = packedClass; break; default: return false; } return true; } X++: public container pack() { return [#CurrentVersion, #CurrentList]; } |
|
11.01.2011, 10:33 | #16 |
Участник
|
а метод main() есть ?
__________________
Дмитрий |
|
11.01.2011, 10:38 | #17 |
Участник
|
|
|
11.01.2011, 10:43 | #18 |
Участник
|
|
|
11.01.2011, 16:06 | #19 |
Участник
|
|
|
11.01.2011, 16:59 | #20 |
Участник
|
если настроен сервер пакетной обработки, то все будет работать
|
|