AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2009, 10:53   #1  
hated8 is offline
hated8
Участник
Аватар для hated8
Злыдни
 
133 / 18 (1) ++
Регистрация: 27.06.2008
Таймер в милисекундах
Здравствуйте.
Засекаю время работы запроса:

QueryTime = timeNow();
select * ........
QueryTime = timeNow()-QueryTime ;

Подскажите пожалуйста как получить время в милисекундах?
Заранее благодарю...
__________________
Что сломалось не знаем, но уже немного подчинили...
Старый 08.12.2009, 11:17   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Использовать класс WinAPI
Старый 08.12.2009, 13:19   #3  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
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  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
А не правильнее ли использовать профайлер для этих целей?
Старый 08.12.2009, 20:01   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
А можно узнать практический смысл такой точности измерения? В каких случаях может понадобиться такая точность?
Старый 09.12.2009, 23:55   #6  
EfimV is offline
EfimV
Участник
 
30 / 22 (1) +++
Регистрация: 19.04.2008
Адрес: Москва
Можно использовать класс 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  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
В AX 4.0 уже нет класса Timer(), хотя ничто не мешает его перенести из 3.0...
Старый 08.01.2011, 18:33   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от ivas Посмотреть сообщение
WinApi::getTickCount();

но учтите, что обновляется примерно 50раз в секунду, если надо точнее импользуйте мультимедия таймер.
Что вы имели в виду когда говорили про 50 раз в секунду ?
Старый 09.01.2011, 06:11   #9  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от Logger Посмотреть сообщение
Что вы имели в виду когда говорили про 50 раз в секунду ?
Это значит, что он тикает не по 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  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Alex_KD Посмотреть сообщение
Это значит, что он тикает не по 1 мс, а по гдето (из опыта) 16 мс. Тоесть как раз гдето 50 раз в секунду.
Как правило этой точности хвататет за глаза, если же надо замерить операцию которая <16 мс, то можно просто замерить время 100-1000 проходов.
Спасибо.

Похоже внутренние Аксаптовские счетчики в 2009-й версии именно с такой точностью и работают. По крайней мере логирование долгих запросов SQL отображает длительность 15 миллисекунд или 0.
Старый 09.01.2011, 18:22   #11  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Для расширения нашего кругозора - про таймеры Windows: http://cprime.110mb.com/lesson/0106/6-1.php
Старый 09.01.2011, 19:00   #12  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Gustav Посмотреть сообщение
Для расширения нашего кругозора - про таймеры Windows: http://cprime.110mb.com/lesson/0106/6-1.php
Цитата:
Следует учесть, что хотя временные интервалы таймеров задаются в относительно мелких единицах (миллисекундах или даже меньше), реально практически невозможно измерить (или отсчитать) время меньшее, чем 10-20 миллисекунд. Для гарантированного отсчета таких маленьких временных интервалов необходимо писать драйвер. [...] Похоже также, что частота прерываний от таймера в современных версиях Windows больше, чем 18.2 раза в секунду. По крайней мере в Windows 98 и Windows 2000 отличия точно имеются.
Да, во-первых, частота выше, во-вторых, при желании можно с помощью штатного таймера и некоторой перенастройки Windows измерять интервалы длиной порядка 1мс - см. Windows Internals, раздел «Параметры в Boot.ini»:
Цитата:
/TIMERES=
В системах со стандартной многопроцессорной x86-версией HAL (Halmps.dll) задает разрешение системного таймера. Аргументом является значение в сотнях наносекунд, но частота устанавливается в соответствии с ближайшим меньшим значением, поддерживаемым HAL (см. ниже).
Код:
Сотни наносекунд Миллисекунды (мс)
9766             0,98 
19532            2,00
39063            3,90 
78125            7,80
Разрешение по умолчанию - 7,8 мс. Разрешение системного таймера влияет на разрешение ожидаемых таймеров. Например, параметр /TIMERES=21000 установит разрешение таймера равным 2,0 мс
Старый 10.01.2011, 10:18   #13  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Вопросик: каким образом в 2009 AX возможно организовать периодическое выполнение функций, по средствам таймера? Если да, то какой класс за это отвечает, заранее благодарен.
Старый 10.01.2011, 11:10   #14  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Вопросик: каким образом в 2009 AX возможно организовать периодическое выполнение функций, по средствам таймера? Если да, то какой класс за это отвечает, заранее благодарен.
Посмотри вот это сообщение

Обработка входящих сообщений
Старый 11.01.2011, 10:31   #15  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Посмотри вот это сообщение

Обработка входящих сообщений
Спасибо почитал, понял что таймеры мне не подходят, нужно применить пакетную обработку в связи с этим вопрос: как я понял пакетную обработку можно настроить через диалоговое окно класса, программно и из экранной формы "Пакетное Задание", создал класс:
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  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
а метод main() есть ?
__________________
Дмитрий
Старый 11.01.2011, 10:38   #17  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от Damn Посмотреть сообщение
а метод main() есть ?
Да
X++:
static void main(Args _args)
{
 TransClass TransElement = new TransClass();
}
Старый 11.01.2011, 10:43   #18  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Да
X++:
static void main(Args _args)
{
 TransClass TransElement = new TransClass();
}
посмотрите пример класс Tutorial_RunbaseBatch
Старый 11.01.2011, 16:06   #19  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от ice Посмотреть сообщение
посмотрите пример класс Tutorial_RunbaseBatch
Диалоговое окно появляется. Теперь если настроить пакетную обработку для данного класса то его методы будут выполняться на сервера по расписанию указанному в настройках пакетной обработки? Есть ли какие то тонкости?
Старый 11.01.2011, 16:59   #20  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
Диалоговое окно появляется. Теперь если настроить пакетную обработку для данного класса то его методы будут выполняться на сервера по расписанию указанному в настройках пакетной обработки? Есть ли какие то тонкости?
если настроен сервер пакетной обработки, то все будет работать
Теги
таймер

 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:18.