レジストリ関数を使用してカウンター データを使用する
レジストリ関数を使用して、特別なHKEY_PERFORMANCE_DATA
レジストリ キーからパフォーマンス データを収集します。
パフォーマンス データは、実際にはレジストリに格納されません。 レジストリ関数を呼び出すと、システムは適切なパフォーマンス データ プロバイダーからデータを収集します。
注意
通常、カウンター データを使用するためにレジストリ関数を使用しないでください。 代わりに、 パフォーマンス データ ヘルパー (PDH) 関数を使用する必要があります。 PDH 関数は使いやすく、レジストリ関数の誤った使用によって発生する可能性のある多くのパフォーマンスと信頼性の問題を回避します。
注意
Windows OneCoreアプリを作成している場合は、レジストリ関数を使用できません。 代わりに、 PerfLib V2 コンシューマー関数を使用します。
レジストリ関数は、 V1 プロバイダーからデータを収集するための低レベル API です。 レジストリ関数では、 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)
さないでください。
取得する情報を lpValueName
示すには、 RegQueryValueEx 関数の パラメーターを使用します。 に指定できる値を次の表に lpValueName
示します。 値文字列では大文字と小文字は区別されないことに注意してください。
値 | 説明 |
---|---|
Global |
カテゴリに含まれるものを除き、コンピューターに登録されているすべてのパフォーマンス オブジェクトのパフォーマンス データを Costly 取得します。 |
OLD_Global |
Windows Vista 以降: カテゴリに含まれるものを除き、コンピューターに登録されているすべての V1 パフォーマンス オブジェクトのパフォーマンス データを Costly 取得します。 目的の Global データが V1 プロバイダーからのデータであることがわかっている場合に、不要な V2 プロバイダー データを収集しないようにするには、 の代わりにこれを使用します。 |
n1 n2 ... |
1 つ以上のパフォーマンス オブジェクトのパフォーマンス データを取得します。 取得する各オブジェクトに関連付けられている 10 進インデックスをスペース区切りリストで指定します。 たとえば、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) 関数は、マシンで使用可能なパフォーマンス オブジェクトのセットを決定するときに、メタデータのみのコレクションを自動的に使用します。
メタデータのみの操作に対するオペレーティング システムのサポートは、レジストリ値の 0 以外の HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata
値で示されます。 この値が存在しない場合、または に0
設定されている場合は、メタデータのみのコレクション (例: ) ではなく、フル データ コレクション (例: ) を使用します。 Global
MetadataGlobal
すべてのパフォーマンス オブジェクトでメタデータのみのコレクションがサポートされているわけではありません。 コレクションをMetadataGlobal
要求すると、Windows はメタデータのみのサポートのために各パフォーマンス オブジェクトをチェックします (レジストリ値の 0 以外のHKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata
値で示されます)。 パフォーマンス オブジェクトがメタデータのみのコレクションをサポートしていない場合、Windows は オブジェクトから通常のデータ収集を実行します。 パフォーマンス オブジェクトがメタデータのみのコレクションをサポートしている場合、Windows は オブジェクトからメタデータのみのコレクションを実行します。 メタデータのみのクエリに対して返されるデータには、完全なデータとメタデータのみのコレクションの両方からのブロックが含まれます PERF_OBJECT_TYPE
。 ブロックには PERF_OBJECT_TYPE
、メタデータのみのクエリを実行するプロバイダーまたはサポートしていないプロバイダーからブロックが収集されたかどうかに応じて、インスタンス情報が含まれるか省略される場合があります。
メタデータのみのコレクションから返されるデータは、次を除き、通常のコレクションのデータと同じです。
- 構造体のフィールドは
NumInstances
、(オブジェクトが 0 個以上の名前付きインスタンスをサポートしていることを示す) またはPERF_METADATA_NO_INSTANCES
(オブジェクトに常に 1 つの名前のないインスタンスがあることを示す) のいずれかPERF_METADATA_MULTIPLE_INSTANCES
PERF_OBJECT_TYPE
になります。 - 構造体の後に
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
を参照してください。