性能計數器究竟是什麼,它們是如何工作的?它們是特定於Windows還是操作系統級別的概念,並且可以在Linux上使用?什麼是性能計數器?
如何在我的.NET應用程序中使用它們來測量應用程序各個部分的執行時間?
我google搜索,但出人意料地沒有找到任何偉大的參考。
性能計數器究竟是什麼,它們是如何工作的?它們是特定於Windows還是操作系統級別的概念,並且可以在Linux上使用?什麼是性能計數器?
如何在我的.NET應用程序中使用它們來測量應用程序各個部分的執行時間?
我google搜索,但出人意料地沒有找到任何偉大的參考。
作爲一個概念,性能計數器是可測量的,可報告的度量標準,內核或應用程序可以向操作系統報告。認爲CPU負載,內存使用情況,網絡帶寬等都是性能計數器的例子。這不僅僅是基於硬件的;一個網絡服務器可以報告它正在處理的會話數量,或者一個數據庫服務器可以報告連接數和每秒查詢次數。至少在Windows中,您可以爲應用程序創建自己的應用程序;如果您有將輸入文件處理到數據庫的服務器應用程序,則可以使用文件/秒或KB /秒報告其吞吐量。您可以連續幾小時報告服務器正常運行時間,或者以自安裝以來的時間百分比報告。
根據您的開發環境(語言,框架,庫)和目標操作系統,訪問或創建性能計數器的方式會有很大差異,但我無法想象一個至少不能報告的現代內核硬件性能數字。
.Net中的性能計數器特定於Windows。我不認爲使用性能計數器來衡量執行時間是一個好方法,它會讓事情變得比我想象的要複雜。 Visual Studio包含一個性能工具,如果你轉到View - OtherWindows - Performance Explorer菜單,性能資源管理器窗口出現,你可以點擊Launch Performance Wizard按鈕。 另一種可能性是使用秒錶類將使用高分辨率定時器,如果您的計算機有一個:
Int64 nanoSecPerTick = (1000L * 1000L * 1000L)/Stopwatch.Frequency;
Stopwatch timer = Stopwatch.StartNew();
// execute the code that you want to time
timer.Stop();
Int64 nanoSec = timer.ElapsedTicks/nanoSecPerTick;
// or if you don't need such fine grained timing:
Int64 milliSec = timer.ElapsedMilliseconds;
Console.Write("Elapsed time: " + nanoSec + "ns");
你提到的性能工具僅在Premium或Ultimate版本。 – adrianbanks 2010-09-25 02:06:37