如何测量视图特定部分的执行时间[重复]
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.Stopwatch
class 并使用几个 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文件的执行时间[重复]