首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Windows 7 開發實作:效能計數器與 Windows Performance Toolkit 進階應用

     編輯:關於.NET

實驗概覽

Windows 7 繼承了 Windows Vista 及更早版本的檢測平台,提供多種機制公開應用程式的診斷資訊,包含:

  • Windows 事件追蹤 (ETW)
  • Windows 效能計數器
  • Windows Management Instrumentation (WMI)
  • 事件日誌

分析應用程式效能並善用檢測資訊,是實務上進行故障診斷的關鍵任務。Windows 檢測機制結合 Windows Performance Toolkit,能提供精簡且強大的診斷分析體驗。

學習目標

  • 使用 Windows 效能計數器公開應用程式檢測資訊
  • 使用 Windows Performance Toolkit 分析應用程式效能

系統需求

  • Microsoft Visual Studio 2008
  • Windows 7
  • Windows 7 SDK
  • Microsoft Windows Performance Toolkit

注意: 本實驗展示的技術僅供教學示範,實務開發中應使用獨立的提升流程(或安裝程式)註冊效能計數器,並考慮使用多執行個體效能計數器以支援多使用者案例(如快速使用者切換、終端服務),避免影響使用者體驗。

練習 1:使用效能計數器進行檢測

本練習將引導您為現有的檔案複製應用程式加入 Windows 效能計數器,使其能對外公開複製進度資訊,方便程式化存取或遠端監控。

前置準備

請以系統管理員身分啟動 Visual Studio,或確保應用程式以權限提升方式執行(右鍵點擊執行檔選擇「以系統管理員身分執行」),這是效能計數器註冊的必要條件。

任務 1:建立公開效能計數器的類別

  1. 開啟 %TrainingKitInstallfolder%\InstrumentationAndPerformance\Ex1-PerfCounters\Begin\Begin.sln,選擇 C# 或 Visual Basic 專案。
  2. 在方案總管中右鍵點擊 FileCopier 專案,選擇 加入新項目,新增名為 FileCopyPerformanceCounters 的類別 (C#) 或模組 (VB)。
  3. C# 專用: 將類別宣告為 static,確保只需單一執行個體。
  4. 在檔案頂端引用 System.Diagnostics 命名空間。
  5. 新增公用 Initialize 方法,初始化 PerformanceCounterCategory 與 PerformanceCounter 物件。
  6. 建立 CounterCreationDataCollection 執行個體,並加入兩個計數器:
    • Total Files Copied(類型:PerformanceCounterType.NumberOfItems32)
    • % Files Copied(類型:PerformanceCounterType.NumberOfItems32)
  7. 使用 PerformanceCounterCategory.Exists 檢查 FileCopier 類別是否存在,若存在則刪除後重建。
  8. 呼叫 PerformanceCounterCategory.Create 正式註冊計數器類別與計數器。
  9. 在類別中新增兩個私有靜態 PerformanceCounter 欄位:totalFilesCounter、percentDoneCounter,並在 Initialize 中實例化。
  10. 在 MainForm 建構函式中呼叫 FileCopyPerformanceCounters.Initialize()。
  11. 按 F5 執行應用程式,確認無例外狀況發生(代表計數器註冊成功)。

任務 2:公開診斷資訊

  1. 在 FileCopyPerformanceCounters 中新增 UpdateTotalFiles(int) 與 UpdatePercentDone(int) 方法,分別設定對應計數器的 RawValue 屬性。
  2. 修改檔案複製迴圈(BtnCopy_Click 或 worker_DoWork),每複製一個檔案即呼叫 UpdateTotalFiles 更新已複製檔案數。
  3. 在進度回報事件(ProgressChanged)中呼叫 UpdatePercentDone 更新完成百分比。
  4. 執行應用程式,選擇來源與目標資料夾(來源需有檔案、目標為空)。
  5. 啟動效能監視器 (perfmon),在左側選擇 監視工具 > 效能監視器。
  6. 點擊工具列綠色「+」按鈕,從 FileCopier 類別中加入 % Files Copied 與 Total Files Copied 計數器,並隱藏預設的 % Processor Time。
  7. 回到應用程式點擊「複製」,觀察效能監視器中計數器值隨複製進度即時上升。

圖 1 - 執行 File Copier 應用程式

圖 2 - 開啟效能監視器

圖 3 - 加入效能計數器對話框

圖 4 - 加入效能計數器

圖 5 - 複製檔案中

圖 6 - 複製完成後的效能計數器

練習 2:效能分析

本練習示範如何在不修改程式碼、不使用第三方分析工具的情況下,利用 Windows Performance Toolkit 分析應用程式的 CPU 與 I/O 使用情形。

任務 1:檢測應用程式

  1. 啟動練習 1 完成的應用程式(或使用 %TrainingKitInstallfolder%\InstrumentationAndPerformance\Ex1-PerfCounters\End 提供的完整解決方案)。
  2. 設定來源與目標資料夾。
  3. 以系統管理員身分開啟命令提示字元,切換至 Windows Performance Toolkit 安裝目錄(預設 C:\Program Files\Microsoft Windows Performance Toolkit)。
  4. 執行 xperf -on BASE 啟動基本檢測設定檔。
  5. 在應用程式中點擊「複製」開始操作。
  6. 複製完成後,執行 xperf -d result.etl 產生追蹤檔案。
  7. 執行 xperf result.etl 開啟分析介面。
  8. 從左側圖表清單勾選 Disk Utilization by Process 與 CPU Sampling by Process。
  9. 在各圖表右上角的下拉選單中,僅選取 FileCopier.exe 進程(可從工作管理員取得 PID)。
  10. 觀察 CPU 與磁碟使用率,判斷瓶頸所在;以滑鼠右鍵點擊圖表區域可檢視 Summary Table(磁碟存取統計)與 Detail Graph(磁碟磁頭活動細節)。
  11. 分析完成後,執行 del result.etl 清理追蹤檔。

圖 7 - 分析檢測資料

圖 8 - 兩圖表皆篩選 FileCopier 進程

總結

本實驗實作了兩項核心技能:

  1. 透過 Windows 效能計數器將應用程式內部進度資訊公開,支援程式化存取與遠端監控。
  2. 善用 Windows Performance Toolkit 在不修改原始碼的前提下,從外部深入分析應用程式的 CPU、磁碟 I/O 行為,快速定位效能瓶頸。

完整練習解決方案位於 %TrainingKitInstallfolder%\InstrumentationAndPerformance\Ex1-PerfCounters\End 目錄下。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved