Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET页面中的时间测量_Asp.net_Timing - Fatal编程技术网

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()

我有一个普通的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));
    }
}
我实例化了一个新的计时对象,并用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。。。美国大学