如何测量视图特定部分的执行时间[重复]

Posted

技术标签:

【中文标题】如何测量视图特定部分的执行时间[重复]【英文标题】:how to measure execution time in specific part of View [duplicate] 【发布时间】:2017-12-12 08:28:49 【问题描述】:

我想在 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?

【问题讨论】:

【参考方案1】:

我建议您在这里做的是通过Stopwatch.StartNew 创建Stopwatch 的实例,执行您要计算执行时间的方法或代码。停止 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 以显示经过的时间..

正如我在 Alexander 评论您想要开始时间、结束时间等之后看到的那样,我建议您在这里做的是通过继承 System.Diagnostics.Stopwatchclass 并使用几个 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());
    

我希望你能抓住重点,我希望这能帮助你解决你的问题

【讨论】:

他还想要开始日期和结束日期 @AlexanderHiggins 我怎么知道?那是在哪里写的,我看起来像预言家吗 :) :) 我在他的问题中唯一能看到的是执行/经过的时间..也许我在某个地方错过了那个,但我真的看不到在哪里..跨度> 问题要求计算并通过推理打印出 A、B 和 C。您的代码仅计算并打印出 B。 @AlexanderHiggins 检查我的编辑。 @Roxy'Pro 你的回答很好,你值得投票。【参考方案2】:

你可以这样做:

@
    DateTime StartTime = DateTime.Now;
    System.Diagnostics.StopWatch Watch = new System.Diagnostics.StopWatch();
    @Html.Raw("<p>start time is: " + StartTime.ToString() + "</p>");
    Watch.Start();
    for (int i = 0; i < 1000000; i++)
        

        if (i % 100000 == 0)
        
             @Html.Raw("<p>" + i.ToString() + "i</p> <br />");  
        

    
    Watch.Stop();
    DateTime EndTime = DateTime.Now;
    @Html.Raw("<p>End time is " + EndTime.ToString() + "</p>");
    @Html.Raw("<p>Execution time is: " + Watch.Elapsed.ToString() + "</p>");

通常,我建议使用StopWatch 来跟踪经过的时间,但由于您想要开始和结束时间,您不妨捕获两个日期并显示差异以计算时间跨度。

【讨论】:

记住DateTime的分辨率没有那么高。 等待没有编译或者你没有在屏幕上看到它?另外,让我修复循环中的 @ 语句。 Html.Raw 没有在这段代码中执行,我不知道为什么,TimeSpan 也给出了非静态字段、方法或属性需要对象引用的错误 对不起,应该读过ElapsedToString,Html.Raw 在它之前需要@。

以上是关于如何测量视图特定部分的执行时间[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python包装脚本来测量另一个python文件的执行时间[重复]

测量代码段的 Java 执行时间、内存使用和 CPU 负载

测量执行时间和使用的内存

CUDA程序不测量执行时间:cudaEventRecord

使用 System.nanoTime() 时如何确定哪个执行时间更有信誉[重复]

如何测量java程序中方法的cpu使用率[重复]