![]() |
#20 |
Участник
|
Лог на вход дает валидные данные.
Подставляем значения в формулу: return (long)((double)QPFTime / (double)mFrequency * (double)multiplier); Берем обычное консольное приложение и 4 переменные создаем. X++: double a = (double)QPFTime; // 2, пример из изображения выше double b = 0; // проблемная переменная double c = (double)multiplier; // 10000000, на само деле может быть любой double d = (a / b * c); Вот тут погорячился. Трейсер просто последовательно считывает заголовки из файла. Сначала считывается "красивый": Следующий код его обрабатывает: X++: private void SetCurrentTraceInfo(EventArrivedEventArgs e) { QueryPerfCounter.Frequency = e.Properties.TryGetValue<long>("PerfFreq"); TraceInfo.Current.TotalBuffers = e.Properties.TryGetValue<uint>("BuffersWritten"); TraceInfo.Current.EventsDropped = e.Properties.TryGetValue<int>("EventsLost"); TraceInfo.Current.TimeStampBeginTick = e.Properties.TryGetValue<long>("StartTime"); TraceInfo.Current.TimeStampEndTick = e.Properties.TryGetValue<long>("EndTime"); } Следовательно безопасная e.Properties.TryGetValue<long>("PerfFreq"); выдает не исключение, а 0. Решений проблемы как было 2.5 так и осталось: 1. Выяснить насколько правильно, что файл содержит BuildString в таком виде. 2. Внести коррективы в исполняемый файл добавив обработку состояния, что значение e.Properties.TryGetValue<long>("PerfFreq") нужно использовать для присвоения QueryPerfCounter.Frequency когда оно не равно 0. 2.5 При вставке записи в БД заменять отрицательные значения на 0 - но это скорее так, для галочки вариант. Последний раз редактировалось Товарищ ♂uatr; 08.04.2023 в 17:37. |
|
Теги |
ax2009, trace parser |
|
|