我想對我的代碼做一些基本的分析,但發現C#中的DateTime.Now只有約16毫秒的分辨率。必須有更好的時間保持我還沒有找到的構造。.NET高分辨率計時器
29
A
回答
48
這裏是一個代碼示例位時的操作:
Dim sw As New Stopwatch()
sw.Start()
//Insert Code To Time
sw.Stop()
Dim ms As Long = sw.ElapsedMilliseconds
Console.WriteLine("Total Seconds Elapsed: " & ms/1000)
編輯:
而整潔的事情是,它可以恢復。
Stopwatch sw = new Stopwatch();
foreach(MyStuff stuff in _listOfMyStuff)
{
sw.Start();
stuff.DoCoolCalculation();
sw.Stop();
}
Console.WriteLine("Total calculation time: {0}", sw.Elapsed);
的System.Diagnostics.Stopwatch類將使用高分辨率計數器,如果一個是在系統上可用。
18
System.Diagnostics.StopWatch類非常適合分析。
如果您不想編寫自己的測量功能,可以鏈接到Vance Morrison's Code Timer Blog。
1
您可以調用Windows中的高分辨率性能計數器。函數名稱是kernel32.dll中的QueryPerformanceCounter。
語法導入到C#:
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);
語法的Windows電話:
BOOL QueryPerformanceCounter(
LARGE_INTEGER *lpPerformanceCount
);
6
對於最高分辨率的性能計數器,您可以使用基礎的win32性能計數器。
添加以下的P/Invoke SIGS:
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool QueryPerformanceCounter(out long perfcount);
[System.Runtime.InteropServices.DllImport("Kernel32.dll")]
public static extern bool QueryPerformanceFrequency(out long freq);
並採用打電話給他們:
#region Query Performance Counter
/// <summary>
/// Gets the current 'Ticks' on the performance counter
/// </summary>
/// <returns>Long indicating the number of ticks on the performance counter</returns>
public static long QueryPerformanceCounter()
{
long perfcount;
QueryPerformanceCounter(out perfcount);
return perfcount;
}
#endregion
#region Query Performance Frequency
/// <summary>
/// Gets the number of performance counter ticks that occur every second
/// </summary>
/// <returns>The number of performance counter ticks that occur every second</returns>
public static long QueryPerformanceFrequency()
{
long freq;
QueryPerformanceFrequency(out freq);
return freq;
}
#endregion
轉儲所有到一個簡單的類,你準備好去。示例(假設PerformanceCounters的類名稱):
long startCount = PerformanceCounter.QueryPerformanceCounter();
// DoStuff();
long stopCount = PerformanceCounter.QueryPerformanceCounter();
long elapsedCount = stopCount - startCount;
double elapsedSeconds = (double)elapsedCount/PerformanceCounter.QueryPerformanceFrequency();
MessageBox.Show(String.Format("Took {0} Seconds", Math.Round(elapsedSeconds, 6).ToString()));
+9
從.NET 2.0開始,Stopwatch類會爲你做這件事。 – 2008-10-02 15:54:32
相關問題
- 1. 高分辨率定時器
- 2. Coldfire高分辨率定時器(MCF5328)
- 3. Qt高分辨率定時器
- 4. xeon phi計時器分辨率
- 5. 測試一個高分辨率顯示器上低分辨率
- 6. 同時支持高分辨率和低分辨率圖像
- 7. 尋找一個高分辨率的計時器
- 8. 多分辨率/分辨率C++容器
- 9. CSS設計網站浮動錯誤(低分辨率與高分辨率)
- 10. 低分辨率Mandelbrot分形不...足夠高的分辨率?
- 11. 高分辨率圖像查看器
- 12. 實時/高分辨率股票API?
- 13. 分辨率太高時檢測手機
- 14. wx.Python中的高分辨率時序
- 15. Kivy全高分辨率的
- 16. 高分辨率iPhone背景
- 17. gravatar最高分辨率
- 18. 高分辨率支持 - Android
- 19. 獲取高分辨率pygame
- 20. 提高分辨率在MATLAB
- 21. Ghostscript和高分辨率?
- 22. 分辨率和寬高比
- 23. 高分辨率CSS精靈
- 24. HTML到PDF高分辨率
- 25. HTML:在低分辨率下渲染高分辨率圖像
- 26. Visual Studio中的Windows Mobile高分辨率設計器
- 27. windows高性能計數器的分辨率是多少?
- 28. 什麼是高分辨率性能計數器?
- 29. 爲Android設計 - 分辨率?
- 30. iPhone 4高分辨率屏幕+高分辨率Google地圖自定義圖標?
是的,那一個計數高分辨率時鐘(如果存在)的滴答聲......正是我所需要的。 – 2008-10-02 15:32:59