2017-07-07 29 views
0

的特定部分執行時間我想要計算執行時間鑑於MVC asp.net 的特定部分例如如何測量視圖

<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

你可以這樣說:


@{ 
    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跟蹤所經過的時間,但因爲你想要的開始和結束時間,你不妨捕獲兩個日期並顯示差異來計算時間跨度。

+1

請記住,DateTime的分辨率並不高。 – jAC

+0

等待不在編譯或者你沒有看到它在屏幕上?另外,讓我修復你在循環中的@語句。 –

+0

Html.Raw在這段代碼中沒有執行,我不知道爲什麼,TimeSpan也給出了一個對象引用的錯誤,需要爲非靜態字段,方法或屬性 –

2

我推薦你在這裏做的是通過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;

PS。如果你不喜歡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

他也想要開始日期和結束日期 –

+0

@AlexanderHiggins我怎麼能知道?寫在哪裏,我看起來像一個先知:)我在他的問題中唯一可以看到的是一個執行/耗時的時間..也許我錯過了某處,但我真的看不到在哪裏.. –

+0

The問題要求計算並推斷打印出A,B和C.你的代碼只是計算打印出來的B. –