|
06.04.2023, 23:04 | #1 |
Участник
|
А возможно что там на входе 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 |
Участник
|
Спасибо, словно на съемках Санта Барбара побывал - там действительно проблема с преобразованием...
...у винды есть вот такая функция 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); } Только не все логи события "XppUtilFuncEvent" (согласно статистике) желают заполнять данную информацию. Поэтому получаем mFrequency равное 0, а далее "силу бесконечности". |
|
Теги |
ax2009, trace parser |
|
|