我已使用System.Diagnostics命名空间与我们软件有问题的客户进行一些性能记录。
我已经设置好了以便.NET自动将当前时间戳添加到日志条目traceOutputOptions="Timestamp"
但是无法将时间戳转换回日期时间以便显示(它总是给我一年的日期0000)。
这个问题似乎不是什么大问题,因为文档说它来自DateTime.Now
。因此,即使他们相对,我认为我至少可以确定两个条目之间的时间跨度。
我现在已将DateTime标志添加到配置中,试图弄清楚如何操作,看起来这些愚蠢的诊断时间戳是300纳秒而不是100纳秒。总是这样吗?因为我真的不想回到客户那里重做日志记录!
编辑:代码呃...不确定你想看到什么。这是新的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>
这就是我试图将时间戳转换为DateTime的地方:
long lTS = Int64.Parse(strTS);
var dt = new DateTime(lTS);
答案 0 :(得分:3)
根据this msdn page,写入的时间戳是GetTimestamp
类的Stopwatch
方法的返回值。
时间戳|写下时间戳,由GetTimestamp方法的返回值表示。
这意味着它的不是一个unix时间戳,而是计时器中的滴答数:
获取计时器机制中的当前滴答数。
请注意,您获得的数字取决于计时器分辨率,如GetTimeStamp()
方法文档的备注中所述:
如果Stopwatch类使用高分辨率性能计数器,GetTimestamp将返回该计数器的当前值。如果Stopwatch类使用系统计时器,GetTimestamp将返回DateTime.Now实例的当前DateTime.Ticks属性。
因此,这不是DateTime
值,而是TimeSpan
值。
使用您已有的DateTime值,因为您在DateTime
配置中指定了traceOutputOptions
选项。