基础。 时间测量

dotTrace 可以通过多种方式测量调用执行时间: 实际时间(性能计数器)、 实际时间(CPU 指令)、 线程时间和 线程周期时间。
在配置分析会话时,在 分析器选项中选择 时间度量 方法。
实际时间(CPU 指令)
实际时间(CPU 指令) ,也称为真实时间或挂钟时间,是方法进入和退出之间经过的时间。 这种方法在方法消耗 CPU 并执行有意义的工作时与方法处于休眠、等待或加入状态时没有区别。 dotTrace 在这两种情况下都会测量时间。 因此,它在方法进入和退出时读取 TSC 处理器寄存器的值,然后计算差值。
实际时间(性能计数器)
实际时间(性能计数器) 类似于 实际时间(CPU 指令) ,只是它使用了一种稍有不同的时间间隔测量方式。 dotTrace 使用 Performance Counter API 从操作系统、网络和设备中检索并使用性能计数器数据来测量时间。
线程时间
线程时间 是通过线程特定的计时器测量的时间,当线程暂停(等待处理器或休眠)时,计时器也会暂停。 这种测量仅支持采样分析,并且分辨率低于其他方法(约 10 毫秒)。
线程周期时间
线程周期时间 是通过线程特定的计时器测量的时间,当线程暂停(等待处理器或休眠)时,计时器也会暂停。 这是一种对您的应用程序代码进行计时的更精确的方法。 实际上, 线程周期时间 类似于 实际时间(CPU 指令) ,它也使用 CPU 指令来计算时间,但不考虑线程未执行实际工作的时间。
示例
要了解实际时间和线程时间之间的区别,请考虑以下示例。 一个函数执行了 10 秒。 它等待网络数据 8 秒。 然后在剩下的 2 秒内处理数据,没有休眠或等待。 该函数的实际时间是 10 秒。 该函数的线程时间是 2 秒。
在跟踪分析中,由于操作系统的限制,测量实际时间通常比测量线程时间快得多(快达 10 倍)。 如果使用采样分析,测量这两种时间的开销是相同的。