我有一个普通的 asp.net 页面,其中包含一些我想测量其执行时间的代码。为此,我创建了一个非常基本的辅助类:
public class Timing
{
private long m_ticksBefore;
private long m_ticksAfter;
public void Before()
{
m_ticksBefore = DateTime.Now.Ticks;
}
public void After()
{
m_ticksAfter = DateTime.Now.Ticks;
}
public void TraceTime(string note)
{
TimeSpan span = new TimeSpan(m_ticksAfter - m_ticksBefore);
System.Diagnostics.Trace.Write(string.Format("\n...Timing for {0}...\nTicks: \t{1}\nMilliseconds: \t{2}\nSeconds: \t{3}\n..................", note, span.Ticks, span.TotalMilliseconds, span.TotalSeconds));
}
}
我实例化了一个新的 Timing 对象,并使用 Before() 和 After 方法包装我希望监视的代码,最后调用 TraceTime() 方法,以便将结果输出到 IDE 中的输出窗口。
奇怪的是,对页面的第一次请求会产生大约 40 毫秒的预期计时结果,但刷新页面 (F5) 会给我 0 滴答的执行时间。即使使用新参数强制执行受监控区域内的不同代码执行页面,也会显示一个平坦的 0。
如果我改用 System.Diagnostics.StopWatch 我会得到更真实的结果
Stopwatch watch1 = Stopwatch.StartNew();
//Some code to monitor
watch1.Stop();
System.Diagnostics.Trace.Write(watch1.ElapsedTicks);
对我来说,代码似乎非常相似,我似乎无法找出第一种方法无法输出真实结果的原因......
这似乎是在幕后执行的某种优化问题,但我真的不明白。也许是由于我个人的时间问题,即就寝时间问题......