共用方式為


使用登錄函式取用計數器資料

使用 登錄函式 從特殊 HKEY_PERFORMANCE_DATA 登錄機碼收集效能資料。

效能資料實際上不會儲存在登錄中。 呼叫登錄函式會導致系統從適當的效能資料提供者收集資料。

注意

您通常不應該使用登錄函式來取用計數器資料。 相反地,您應該 使用效能資料協助程式 (PDH) 函式。 PDH 函式更容易使用,並避免許多效能和可靠性問題,這些問題可透過不正確的登錄函式使用而發生。

注意

如果您要撰寫Windows OneCore應用程式,則無法使用登錄函式。 請改用 PerfLib V2 取用者函式

登錄函式是低階 API,可用來從 V1 提供者收集資料。 登錄函式也支援透過呼叫V2 取用者函式的轉譯層,從V2 提供者收集資料。

若要從本機系統取得效能資料,請呼叫 RegQueryValueEx 函式。 使用 HKEY_PERFORMANCE_DATA 做為索引鍵。 第一次呼叫會開啟金鑰。 您不需要先明確開啟金鑰。

若要從遠端系統取得效能資料,請呼叫 RegConnectRegistry 函式 。 使用遠端系統的電腦名稱稱,並使用 HKEY_PERFORMANCE_DATA 作為金鑰。 此呼叫會擷取代表遠端系統效能資料的索引鍵。 使用此金鑰而非 HKEY_PERFORMANCE_DATA 索引鍵來擷取資料。

當您完成取得效能資料時,請務必使用 RegCloseKey 函式來關閉金鑰的控制碼。 這在本機和遠端案例中很重要:

  • RegCloseKey(HKEY_PERFORMANCE_DATA) 實際上不會關閉登錄控制碼,但會清除所有快取的資料,並釋放載入的效能 DLL。
  • RegCloseKey(hkeyRemotePerformanceData) 關閉遠端電腦的登錄控制碼。

重要

請勿在 期間 DLL_PROCESS_DETACH 呼叫 RegCloseKey(HKEY_PERFORMANCE_DATA)

您可以使用 lpValueNameRegQueryValueEx 函式的參數來指出要擷取的資訊。 下表列出您可以針對 lpValueName 指定的值。 請注意,值字串不會區分大小寫。

Description
Global 擷取電腦上註冊之所有效能物件的效能資料,但類別中包含的 Costly 物件除外。
OLD_Global Windows Vista 和更新版本: 擷取電腦上註冊之所有 V1 效能物件的效能資料,但類別中包含的 Costly 效能資料除外。 當您知道感興趣的資料來自 V1 提供者時,請使用此選項 Global 來避免收集不必要的 V2 提供者資料。
n1 n2 ... 擷取一或多個效能物件的效能資料。 指定與您要在空格分隔清單中擷取之每個物件相關聯的十進位索引。 例如,如果您想要擷取 System 和 Memory 物件,而且您已判斷對應名稱字串的索引為 2 和 4,請指定字串 "2 4" 。 請注意,查詢可以傳回與您要求不同的物件數目。 如果指定的物件相依于另一個物件類型,或提供者傳回未直接要求的資料,就會發生這種情況。 例如,執行緒相依于進程,因此如果您從 Thread 物件要求資料,結果會包含 來自 Process 物件的資料。
Counter n 擷取指定語言識別項的名稱字串,例如 的 Counter 9 英文。 使用傳回的名稱字串來尋找對應至指定名稱的索引,或尋找對應至指定索引的名稱。 如需詳細資訊 ,請參閱擷取計數器名稱和解說文字 。 請注意,傳回的清單包含兩個物件 (計數器集) 名稱和計數器名稱-- 沒有簡單的方法來判斷名稱是物件名稱或計數器名稱。
Help n 擷取指定語言識別項的說明字串,例如 的 Help 9 英文。 使用傳回的說明字串來尋找對應至物件 (計數器集) 或計數器說明索引的描述。 如需詳細資訊 ,請參閱擷取計數器名稱和解說文字
Costly 廢棄: 擷取物件類型的效能資料,其資料在處理器時間或記憶體使用量方面收集的成本很高。 此集合可能需要幾分鐘的時間,才能在大量載入的電腦上。 如果您的應用程式需要在此資料收集期間回應使用者,您應該在背景工作執行緒上執行集合。
MetadataGlobal Windows 10 20H1 和更新版本:擷取電腦上註冊之所有效能物件的中繼資料,但類別中包含 Costly 這些物件除外。
OLD_MetadataGlobal Windows 10 20H1 和更新版本:擷取電腦上註冊之所有V1效能物件的中繼資料,但類別中包含的 Costly 專案除外。
MetadataCostly Windows 10 20H1 和更新版本:擷取昂貴效能物件的中繼資料
OLD_MetadataCostly Windows 10 20H1 和更新版本:擷取昂貴V1效能物件的中繼資料

如需登錄傳回之效能資料格式的詳細資訊,請參閱 效能資料格式

如需取得電腦上已註冊計數器的名稱和描述的範例,請參閱 擷取計數器名稱和解說文字

如需存取效能資料的元件範例,請參閱 顯示物件、實例和計數器名稱

如需擷取、計算和列印計數器值的範例,請參閱擷取計數器資料和計算計數器值

元資料集合

Windows 10 20H1 新增僅元資料集合作業的支援。 這些作業適用于製作電腦上可用的效能物件和計數器清單時。

  • 僅限中繼資料的集合可能比對應的完整資料收集更快,因為它可以略過從支援僅限元資料集合的物件收集實例資料。
  • 僅限元資料集合使用的記憶體小於對應的完整資料收集,因為它不需要空間,才能從支援僅限元資料集合的物件傳回實例資料。
  • 只有中繼資料的集合比對應的完整資料收集更完整,因為它會傳回可用計數器的清單,即使沒有支援僅限元資料集合的物件實例也一樣。

提示

從具有許多進程或執行緒的伺服器收集資料時,適當地使用僅限中繼資料的集合特別重要。 一般 Global 集合必須收集並傳回系統上每個進程和執行緒的資訊,而 MetadataGlobal 集合不需要收集進程或執行緒資訊。

效能資料協助程式 (PDH) 函式會在判斷電腦上可用的效能物件集時,自動使用僅限中繼資料的集合。

僅限中繼資料作業的作業系統支援是以登錄值中的 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata 非零值表示。 如果這個值不存在或設定為 0 ,請使用完整資料收集 (例如 Global ,) 而不是僅限中繼資料的集合 (例如 MetadataGlobal) 。

並非所有效能物件都支援僅限中繼資料的集合。 當您要求 MetadataGlobal 集合時,Windows 會檢查每個效能物件是否有僅限中繼資料支援 (登錄值) 中 HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata 非零值所指出。 如果效能物件不支援僅限中繼資料的集合,Windows 會從 物件執行一般資料收集。 如果效能物件支援僅限元資料集合,Windows 會從 物件執行僅限元資料集合。 針對僅限中繼資料查詢傳回的資料,接著會同時包含 PERF_OBJECT_TYPE 來自完整資料和僅限元資料集合的區塊。 區塊 PERF_OBJECT_TYPE 可能會包含或省略實例資訊,視區塊是從不支援僅限中繼資料查詢的提供者收集而來。

從僅限元資料集合傳回的資料與來自一般集合的資料相同,不同之處在于:

  • NumInstances結構的欄位 PERF_OBJECT_TYPEPERF_METADATA_MULTIPLE_INSTANCES 是 (表示物件支援 0 個以上的具名實例) 或 PERF_METADATA_NO_INSTANCES (表示物件一律有 1 個未命名的實例) 。
  • 結構之後 PERF_OBJECT_TYPE 不會有任何 PERF_INSTANCE_DEFINITION 區塊。

Perflib

登錄 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib 機碼支援數 DWORD 個與效能計數器集合相關的值。 這些通常應該未設定預設行為,但可能會視需要由系統管理員針對特定案例進行設定。

  • Configuration Flags:預設值為 0。 可以設定為下列旗標的組合,以啟用特殊行為:
    • 0x01:請勿測試資料緩衝區對齊錯誤的外掛程式。 根據預設,系統會驗證外掛程式的緩衝區對齊方式。
    • 0x02:不要自動停用外掛程式。 根據預設,系統會停用損毀或顯示不正確行為的外掛程式。
    • 0x04:請勿驗證外掛程式緩衝區完整性。 根據預設,系統會檢查外掛程式緩衝區溢位。
    • 0x08:不要檢查外掛程式逾時。 根據預設,系統會檢查外掛程式是否停止回應。
  • Disable Performance Counters:預設值為 0。 如果設定為 1,系統將會停用 V1 效能計數器的集合。
  • ExtCounterTestLevel:預設值為 4。 控制系統執行多少驗證,以防止不正確的外掛程式行為。 如需詳細資訊,請參閱<PM_COLLECT_PROC>。