2015-05-28 5 views
0

Я использовал пространство имен System.Diagnostics, чтобы выполнить регистрацию производительности с клиентом, у которого есть проблемы с нашим программным обеспечением.Временная шкала к преобразованию DateTime

Я установил все, чтобы .NET автоматически добавила текущую временную метку к записи журнала traceOutputOptions="Timestamp", но мне не удалось преобразовать временную метку обратно в даты для отображения (она всегда дает мне даты с года 0000).

Это не похоже на проблему, поскольку в документации говорится, что это всего лишь тики от DateTime.Now. Поэтому, даже если они родственники, я думал, что смогу, по крайней мере, определить промежуток времени между двумя записями.

Теперь я добавил флаг даты в конфигурацию, пытаясь выяснить, как это сделать, и кажется, что эти глупые метки времени диагностики составляют 300 наносекунд вместо 100 нс. Это всегда так? Потому что я действительно не хочу возвращаться к клиенту и повторять регистрацию!

EDIT: Код Uh ... Не уверен, что вы хотите видеть. Вот новый app.config раздел:

<system.diagnostics> 
<trace autoflush="true" indentsize="3" /> 
<sources> 
    <source name="Application" switchValue="All"> 
    <listeners> 
     <remove name="Default" /> 
     <add name="shared" /> 
    </listeners> 
    </source> 
    <source name="Library" switchValue="All"> 
    <listeners> 
     <remove name="Default" /> 
     <add name="shared" /> 
    </listeners> 
    </source> 
</sources> 
<sharedListeners> 
    <add name="shared" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="app.log" 
     traceOutputOptions="Timestamp,DateTime" /> 
</sharedListeners> 
</system.diagnostics> 

и это то, где я пытаюсь превратить Timestamp в DateTime:

long lTS = Int64.Parse(strTS); 
var dt = new DateTime(lTS); 
+4

Не могли бы вы показать соответствующий код? –

ответ

3

Согласно this msdn page, то Отметка написанное возвращаемое значение из GetTimestamp метод Stopwatch класс.

Timestamp | Напишите временную метку, которая представлена ​​возвращаемым значением метода GetTimestamp.

Это означает, что это не UNIX-метки времени, но количество тиков в таймере:

Возвращает текущее количество тиков в механизме таймера.

Обратите внимание, что номер, который вы получите, зависит от разрешения таймера, как указано в примечаниях документации GetTimeStamp() метода:

Если Stopwatch класс использует счетчик производительности с высоким разрешением, GetTimestamp возвращается текущее значение этого счетчика. Если в классе Stopwatch используется системный таймер, GetTimestamp возвращает текущее свойство DateTime.Ticks экземпляра DateTime.Now.

Так что это не значение DateTime, а значение TimeSpan.

Используйте значение DateTime, которое у вас уже есть, поскольку вы указали опцию DateTime в конфигурации traceOutputOptions.

+1

OP не добавила сначала значение DateTime в журнал. Проблема кроется в этом. Боюсь, ему придется переделать сессию производительности, чтобы получить правильные значения. – Kryptos

+0

Теперь, когда вы написали, я увидел это в тексте вопроса.если бы он был хорошо отформатирован, я бы, вероятно, не пропустил это легко. Тем не менее, я все еще думаю, что мой ответ может помочь ему понять и исправить свою проблему. –

+0

Проблема заключается в том, что я добавляю флаги DateTime и Timestamp, эти два значения не соответствуют тому, что говорит документация. Значения Timestamp не являются тиками TimeSpan. Зачем? – Kempeth

Смежные вопросы