ASP.NET页面中的时间测量
我有一个普通的asp.net页面,其中包含一些我想要测量的执行时间的代码。为此,我创建了一个非常基本的助手类:ASP.NET页面中的时间测量,asp.net,timing,Asp.net,Timing,我有一个普通的asp.net页面,其中包含一些我想要测量的执行时间的代码。为此,我创建了一个非常基本的助手类: public class Timing { private long m_ticksBefore; private long m_ticksAfter; public void Before() { m_ticksBefore = DateTime.Now.Ticks; } public void After()
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));
}
}
我实例化了一个新的计时对象,并用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);
对我来说,代码似乎非常相似,我似乎无法找到第一种方法无法输出实际结果的原因
这似乎是某种在幕后执行的优化问题,但我真的不明白。可能是因为我的个人时间问题,即睡觉时间问题…我没有遇到与您相同的问题。 我将以下代码放在按钮单击事件上:
Timing timing = new Timing();
timing.Before();
for (int i = 0; i < 100; i++)
Thread.Sleep(1);
timing.After();
// I altered TraceTime to receive a HttpResponse.
timing.TraceTime("this is a note", this.Response);
定时=新定时();
时间。在()之前;
对于(int i=0;i<100;i++)
睡眠(1);
计时后();
//我更改了TraceTime以接收HttpResponse。
time.TraceTime(“这是一个注释”,this.Response);
响应总是接近于:
…这是一个注释的时间安排。。。滴答声:
1000057毫秒:1000057
秒数:01000057
不管是回邮,不是回邮。。。我是否刷新了页面
你如何使用计时课程
编辑
我还将上面的代码放在页面加载处理程序中,得到了完全相同的结果。不管是回发、刷新还是其他什么
您必须告诉我们发生错误的上下文。我没有遇到与您相同的问题。 我将以下代码放在按钮单击事件上:
Timing timing = new Timing();
timing.Before();
for (int i = 0; i < 100; i++)
Thread.Sleep(1);
timing.After();
// I altered TraceTime to receive a HttpResponse.
timing.TraceTime("this is a note", this.Response);
定时=新定时();
时间。在()之前;
对于(int i=0;i<100;i++)
睡眠(1);
计时后();
//我更改了TraceTime以接收HttpResponse。
time.TraceTime(“这是一个注释”,this.Response);
响应总是接近于:
…这是一个注释的时间安排。。。滴答声:
1000057毫秒:1000057
秒数:01000057
不管是回邮,不是回邮。。。我是否刷新了页面
你如何使用计时课程
编辑
我还将上面的代码放在页面加载处理程序中,得到了完全相同的结果。不管是回发、刷新还是其他什么
您必须告诉我们发生错误的上下文。虽然DateTime。现在看起来分辨率为100ns,但Windows实际上只会每15ms更新一次内部时钟。因此,如果您的代码运行时间不到7.5毫秒,那么它似乎根本不需要时间,因为平均来说,您必须等待7.5毫秒才能运行DateTime。现在开始更改 如果你需要更精确的计时,你可以(如你所发现的)使用秒表。这将使用不同的、更精确的API来获得结果 编辑给出的分辨率为“大约10毫秒”。API(使用相同的系统计时器)给出的分辨率为“通常在10毫秒到16毫秒的范围内”
显然,它依赖于硬件-单处理器系统通常为10ms,多处理器系统通常为15ms。虽然DateTime。现在看起来分辨率为100ns,但Windows实际上只每15ms更新一次内部时钟。因此,如果您的代码运行时间不到7.5毫秒,那么它似乎根本不需要时间,因为平均来说,您必须等待7.5毫秒才能运行DateTime。现在开始更改 如果你需要更精确的计时,你可以(如你所发现的)使用秒表。这将使用不同的、更精确的API来获得结果 编辑给出的分辨率为“大约10毫秒”。API(使用相同的系统计时器)给出的分辨率为“通常在10毫秒到16毫秒的范围内”
显然,它依赖于硬件-单处理器系统通常为10ms,多处理器系统通常为15ms。与您在示例中所做的方式完全相同。代码添加到页面加载处理程序中的方式与您的示例中完全相同。我第一次在调试模式下点击页面时,在输出窗口中显示了一个合理的值。如果我重新加载页面(使用F5或ctrl+F5),我会得到0个刻度。这很奇怪…与您在示例中的方式完全相同。代码添加到页面加载处理程序中的方式与您的示例中完全相同。我第一次在调试模式下点击页面时,在输出窗口中显示了一个合理的值。如果我重新加载页面(使用F5或ctrl+F5),我会得到0个刻度。这很奇怪…问题是相同的编码在一种情况下需要40毫秒,在另一种情况下需要0。。。当然,在回发场景中,被度量的代码可能会有不同的反应,但他没有提到这一点。我的观点是,实际上并不需要0毫秒。这仍然是一个很大的下降,但使用秒表进行另一次测试运行约40毫秒后,显示支持此答案的结果(测试运行和时间以毫秒为单位):158.2637 2 1.2936 3 1.3542 4 1.3925……20 0.9812 21 1.033 22 1.0951 23 0.9684 24 0.9667 25 0.9431 26 0.9808谢谢您的回答。我继续看秒表,因为我现在没有时间进一步调查。非常感谢。真烦人,你没有更好的评论编辑器。。阅读上面的测试结果非常困难,如果你能提供答案的来源(msdn文章或类似的文章),那就太好了:)问题是相同的编码在一种情况下需要40毫秒,在另一种情况下需要0。。。美国大学