PerflibV2 でのカスタム パフォーマンス カウンターのプレビューに問題があります。
パフォーマンス モニターはカスタム パフォーマンス カウンター グループを GUID で表示し、展開しようとすると「カウンターを読み込めません」と表示されます。
「Performance Monitor Users」および「Performance Log Users」グループに自分自身を追加しようとしましたが、成功しませんでした。
私はそれをグーグルで検索し、MSDN の記事をたくさん読みましたが、成功しませんでした。
誰かがこの問題に精通していますか?
以下は、カスタム パフォーマンス カウンターを作成して追加する方法の詳細な手順です。
管理されていないアプリケーションから更新されるパフォーマンス カウンターを作成する必要があります。
私が見つけた2つのアプローチがあります:
マネージド パフォーマンス カウンター API をラッピングします。これは、パフォーマンスに影響を与えるため、オプションではありません。
必要な機能を提供する PerflibV2 を使用します。
テスト アプリケーションとして、カスタム パフォーマンス カウンターを記述する次の schema.xml スキーマを作成しました。
<!-- <?xml version="1.0" encoding="UTF-16"?> -->
<instrumentationManifest
xmlns="http://schemas.microsoft.com/win/2004/08/events"
xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<instrumentation>
<counters xmlns="http://schemas.microsoft.com/win/2005/12/counters">
<provider callback = "custom"
applicationIdentity = "PerfCounters.exe"
providerType = "userMode"
providerGuid = "{ab8e1320-965a-4cf9-9c07-fe25378c2a23}">
<counterSet
guid = "{ad36a036-c923-4794-b696-70577630b5cf}"
uri = "Microsoft.Windows.System.PerfCounters.MyCounterSet1"
name = "My LogicalDisk"
description = "This is a sample counter set with multiple instances."
instances = "multiple">
<counter id = "1"
uri = "Microsoft.Windows.System.PerfCounters.MyCounterSet1.MyCounter1"
name = "My Free Megabytes"
description = "First sample counter."
type = "perf_counter_rawcount"
detailLevel = "standard"
defaultScale = "1"/>
</counterSet>
</provider>
</counters>
</instrumentation>
</instrumentationManifest>
そして実行:
ctrpp schema.xml
作成したファイルをテスト アプリケーションに追加し、テスト アプリに大まかに次のように追加しました。
PerfAutoInitialize();
ULONG instanceId = 0;
wchar_t instanceName[] = {'t', 'e', 's', 't', 0};
PPERF_COUNTERSET_INSTANCE b = PerfCreateInstance(hDataSource_schema_1, &CtrSetGuid_schema_1_1, instanceName, instanceId);
以下を使用してパフォーマンス カウンターをインストールしました。
lodctr /m:schema.xml
パフォーマンス モニターからカウンターを読み取ろうとしているときに、PerfCounters アプリケーションが稼働しています。