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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2023, 23:04   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,882 / 3148 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А возможно что там на входе 64-битный счетчик типа аксаптовского \Classes\WinAPI\getTickCount64
(System.DateTime::get_Now())

который считает некие тики. Если это тики процессора, то переполняться может достаточно часто (кстати, если не ошибаюсь, то размер "тик"-а для System.DateTime зависит от версии .net - отсюда и зависимость частоты возникновения глюков от версии винды. Выше версия винды - более мелкий тик - чаще переполняется счетчик).

И возможно что значение этого счетчика трактуется в коде как беззнаковое целое, а используется знаковое целое и при переходе через максимальное целое нормально не обрабатывается при этом.
Получается что если TickStart был положительным целым, а TickFinish перемахнул в область отрицательных, то разница их по модулю всегда будет больше или равная чем 2^63 А само число будет всегда меньше или равно чем -2^63
Но больше не влезает в размерность числа, вот мы и получаем всегда -2^63

Если эти предположения верны, то можно попробовать пофиксить приложение, чтобы корректно обрабатывало такие случаи (где бы еще взять исходники. Хотя при определенном желании можно дизассемблировать и пересобрать).

Ну или заставить все это работать с меньше точностью (задействовать более старую версию дотнет или запустить в режиме совместимости со старой версией винды)

Последний раз редактировалось Logger; 06.04.2023 в 23:24.
Старый 08.04.2023, 03:21   #2  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
269 / 836 (28) +++++++
Регистрация: 23.10.2012
Спасибо, словно на съемках Санта Барбара побывал - там действительно проблема с преобразованием...
...у винды есть вот такая функция QueryPerformanceFrequency
У утилиты есть конвертер "QueryPerfCounter" с функцией:
X++:
public static long ConvertQPFTimeToTicks(ulong QPFTime)
{
	if (!initialized)
	{
		if (!NativeMethods.QueryPerformanceFrequency(out mFrequency))
		{
			throw new InvalidOperationException();
		}
		initialized = true;
	}
	return (long)((double)QPFTime / (double)mFrequency * (double)multiplier);
}
Где для mFrequency может быть инициализирована значением по умолчанию из той самой функции. История на этом могла бы и закончиться (ну да, выдавало бы оно разные результаты на разных машинах), если бы не лог трассировки в комбинации с этой строкой "QueryPerfCounter.Frequency = e.Properties.TryGetValue<long>("PerfFreq");" желающей видеть данное свойство у каждого события лога.
Только не все логи события "XppUtilFuncEvent" (согласно статистике) желают заполнять данную информацию. Поэтому получаем mFrequency равное 0, а далее "силу бесконечности".
Миниатюры
Нажмите на изображение для увеличения
Название: parserdebug.jpg
Просмотров: 34
Размер:	280.4 Кб
ID:	13560  
Теги
ax2009, trace parser

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
dynamicsaxse: KB3163813 CU12 Known Issue – Incorrect Posting amounts – Shipment Packing slip posting Blog bot DAX Blogs 0 13.03.2017 18:11
dynamicscpm: Management Reporter bugs now available in LCS Issue Search Blog bot DAX Blogs 0 13.06.2015 00:14
Странное поведение при закрытии склада-ошибка в коде? Aquarius DAX: Программирование 11 27.06.2013 13:37
axinthefield: Choosing a Single Deployment or Multiple Deployments of AX2009 Blog bot DAX Blogs 0 15.06.2011 03:25

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:34.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.