如何测量View特定部分的执行时间

时间:2017-07-07 23:25:06

标签: c# asp.net razor model-view-controller

我想计算MVC asp.net中View的特定部分的执行时间 例如

<p>start time is A</p>

<br />

@for (int i = 0; i < 1000000; i++)
{

        if (@i % 100000 == 0)
        {
         <p>@i</p> <br />  
        }

}
 <p>End time is B</p>
<p>execution time is: C</p>

如何在上面的代码中计算A,B,C?

2 个答案:

答案 0 :(得分:2)

我建议您在这里做的是通过Stopwatch创建Stopwatch.StartNew的实例,执行您想要计算执行时间的方法或代码。停止您认为应该通过执行完成方法的Stopwatch,然后像下面的代码中那样获取ElapsedMilliseconds

@{
  Stopwatch stopwatch = Stopwatch.StartNew();
  for (int i = 0; i < 1000000; i++)
  {
    if (i % 100000 == 0)
        {
             @Html.Raw("<p>" + i.ToString() + "</p> <br />");  
        }

    }
   stopwatch.Stop();
   @Html.Raw("<p>Elapsed time is: " + stopwatch.ElapsedMilliseconds.ToString() + "</p>");
}

并且,如果您在尝试执行此代码时遇到错误,请确保您已包含System.Diagnostics;

P.S如果你不喜欢stopwatch.ElapsedMilliseconds,你也可以检查stopwatch.Elapsed是否显示已用时间..

正如我在亚历山大的评论中所看到的那样,你想要开始时间,结束时间等,我建议你在这里做的是通过继承System.Diagnostics.Stopwatch类并使用几个DateTime属性扩展它来创建自定义秒表。

我现在将告诉你如何做到这一点:

public class MyCustomStopWatch : Stopwatch
{

        public DateTime? StartAt { get; private set; }
        public DateTime? EndAt { get; private set; }

        public void Reset()
        {
            StartAt = null;
            EndAt = null;

            base.Reset();
        }

        public void Restart()
        {
            StartAt = DateTime.Now;
            EndAt = null;

            base.Restart();
        }

        //This is what is important to you right now, to get data about that when you code started, and when your code finished with executing
        public void Start()
        {
            StartAt = DateTime.Now;

            base.Start();
        }

        public void Stop()
        {
            EndAt = DateTime.Now;

            base.Stop();
        }


 }

如果您想知道我如何使用该代码

不要担心,这是基于您的问题的示例:

@{
      MyCustomStopwatch stopwatch = MyCustomStopwatch();
      for (int i = 0; i < 1000000; i++)
      {
        if (i % 100000 == 0)
            {
                 @Html.Raw("<p>" + i.ToString() + "</p> <br />");  
            }

        }
       stopwatch.Stop();
       @Html.Raw(String.Format("<p>Stopwatch elapsed: {0}, StartAt: {1}, EndAt: {2} </p>", stopwatch.ElapsedMilliseconds.ToString(), stopwatch.StartAt.Value.ToString(), stopwatch.EndAt.Value.ToString());
    }

无论我希望你能抓住这一点,我希望这有助于你解决问题

答案 1 :(得分:1)

你可以这样做:


StopWatch

通常情况下,我建议使用p1 + 4来跟踪已用时间,但由于您需要开始和结束时间,因此您可以捕获两个日期并显示差异以计算时间跨度。