1

TimeSpan私有字段startTimeStampDateTime.Ticks属性有什么区别?有没有一种简单的方法来检索startTimeStamp(不使用反射)?

在此处输入图像描述

4

3 回答 3

5

startTimeStamp是长的,它不是 aTimeSpan也不一定是DateTime.Ticks

这将StopWatch是启动的时间,这将是基于高性能计数器的时间,或者DateTime.Ticks如果没有高性能计数器可用。

startTimeStamp您可以通过调用Stopwatch.GetTimeStamp()静态方法获取生成的当前值。

startTimeStamp不是直接暴露的,但您可以通过调用计算它

Stopwatch.GetTimeStamp() - stopwatch.GetRawElapsedTicks() 
于 2013-08-26T14:04:08.813 回答
2

以下是用于初始化该字段的方法的来源:

    public static long GetTimestamp() {
        if(IsHighResolution) { 
            long timestamp = 0;
            SafeNativeMethods.QueryPerformanceCounter(out timestamp);
            return timestamp;
        } 
        else {
            return DateTime.UtcNow.Ticks; 
        } 
    }

    [DllImport(ExternDll.Kernel32)]
    [ResourceExposure(ResourceScope.None)]
    public static extern bool QueryPerformanceCounter(out long value); 

既然这个方法是public,你也可以自己调用。

于 2013-08-26T14:03:46.327 回答
1

您只能估计开始时间戳。您所要做的就是在启动 StopWatch 之后调用 GetTimeStamp()。

System.Diagnostics.Stopwatch watch = new Stopwatch();
watch.Start();
long ts = Stopwatch.GetTimestamp();

在此处输入图像描述

ts => 62583777603

于 2013-08-26T14:10:58.230 回答