我想计算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?
答案 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
来跟踪已用时间,但由于您需要开始和结束时间,因此您可以捕获两个日期并显示差异以计算时间跨度。