我想測試運行一個方法需要多長時間,我想知道時間跨度是否是最好的方法?我不想記錄方法的開始和結束,因爲我聽說由於創建和更新現有日誌文件所需的時間,日誌記錄不會提供準確的時間讀取。如果時間跨度不是最好的方法,那麼有什麼建議可以做到這一點?在C#中使用時間戳測試方法長度
回答
最好使用專爲此類事物設計的Stopwatch類。
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
DoSomething();
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
有趣的文章比較了各種計時方法:http://reflexangle.blogspot.com/2009/04/datetimenow-vs-systemdiagnosticsstopwat.html。 'StopWatch'出現在上面。 – JDB
Ahhhh看起來好多了。謝謝。 – Icebreaker
@ Marino3d - 如果此解決方案已爲您工作,請不要忘記將其標記爲我接受的答案。 –
我使用Stopwatch
來計算我的代碼。
var sw = new Stopwatch();
sw.Start()
//code to time here
sw.Stop();
Console.WriteLine("Time taken in milliseconds: " + sw.ElapsedMilliseconds);
你可以通過秒錶獲得漂亮的花式。我用它來測試嵌套執行,以及平均多次循環迭代所花費的時間。
要測試多次反覆做:
var sw = new Stopwatch();
List<long> totalTime = new List<long>();
for (var u = 0; u < 100000; u++)
{
sw.Start();
//logic here
sw.Stop();
totalTime.Add(sw.ElapsedMilliseconds);
sw.Reset();
}
Console.WriteLine("Average time in Milliseconds: {0}", totalTime.Average());
你想使用秒錶類。
您應該使用Stopwatch
類:
public void Foo()
{
var sw = Stopwatch.StartNew();
// Do work...
var totalTime = sw.Elapsed;
}
我經常讓自己一個實用的方法來處理這個問題:
public static void ComputeTimings(Action method, string methodName)
{
var sw = Stopwatch.StartNew();
method();
sw.Stop();
Debug.WriteLine("Method {0} took {1}", methodName, sw.Elapsed);
}
這可以被稱爲:
ComputeTimings(() => Foo(bar), "Foo");
這很好,因爲您可以將時間「注入」到您的代碼中並根據需要將其刪除,而無需更改您的實際方法體。
另請注意,對於非常準確的計時,您經常需要執行至少方法兩次。第一次運行方法時,由於JIT編譯器的原因,時序可能會關閉。您可以構建成以上的方法,如果你選擇,即:
public static void ComputeTimings(Action method, string methodName, bool executeOnceFirst = true)
{
if (executeOnceFirst)
method();
var sw = Stopwatch.StartNew();
method();
sw.Stop();
Debug.WriteLine("Method {0} took {1}", methodName, sw.Elapsed);
}
var duration = Measure(() => YourFunction(param1));
long Measure(Action action)
{
Stopwatch sw = Stopwatch.StartNew();
action();
return sw.ElapsedMilliseconds;
}
- 1. 時間戳測試單元測試
- 2. UFT API測試:使用C#的時間戳
- 3. 在onLocationChanged方法中設置時間戳
- 4. Gui測試時間太長 - 您的方法是什麼?
- 5. 使用unix_timestamp方法在spark中創建時間戳
- 6. 長時間使用Handler方法
- 7. 使用時間測量預測緩存行長度
- 8. 如何計算和僅有時間戳的總時間長度?
- 9. Java SDK中用於測試目的的長時間運行方法
- 10. 如何使用C#測試此方法
- 11. C++測試使用gtest的void方法
- 12. 在YouMax 2.0中使用時間戳創建時間戳
- 13. Mongodb長時間運行時間戳
- 14. 時間戳到長日期時間
- 15. 如何使用水豚測試時間戳?
- 16. MySQL現在的方法vs時間戳
- 17. 使用長時間戳或喬達時間
- 18. 何時在Rails中使用時間戳?
- 19. 長度方法不工作在c#
- 20. 單元測試,黑盒測試時需要多長時間?
- 21. 長時間使用實體時在C#中使用EntityFramework
- 22. 在junit中測試當前java時間戳
- 23. C#中的時間戳
- 24. C中的時間戳。
- 25. 時間戳在Objective-C
- 26. 時間戳解析在C#
- 27. 使用時間戳
- 28. 便攜式在c/C++中創建時間戳的方式
- 29. 如何使用C#減去時間戳
- 30. 使用C++獲取Unix時間戳
可能要檢查這個問題,太:http://stackoverflow.com/questions/2923283/stopwatch-vs- using-system-datetime-now-for-timing-events – JDB