パフォーマンスの取得
システムモニタや、タスクマネージャの「プロセス」タブ等で、表示される「CPU使用率」とか「メモリ使用量」とかを所得する方法のメモ。
PDH系APIを使用します。ただし、これはNT系のみでの動作。たしか95系はレジストリに値が記録されていたと記憶…。たしか、昔MSDNLibraryかなにかでPDHの記事があったような記憶あるけど、忘れてしまったのでサンプル作って動作確認。で、何に使うかは不明(^_^;
#include <windows.h> #include <stdio.h> #include <pdh.h>void main()
{
HQUERY hQuery;
HCOUNTER hCounter;
PDH_COUNTER_PATH_ELEMENTS cpe;
char path[256];
DWORD size = 256;
PDH_FMT_COUNTERVALUE FmtValue;
//クエリー作成
PdhOpenQuery(NULL, 0, &hQuery);
//所得したい情報(カウンタ)のパスを作成
//例として、メモ帳のCPU使用率
//ObjectNameやCounterNameで指定する名称は、
//PdhEnumObjects()でオブジェクトの列挙
//PdhEnumObjectItems()でカウンタの列挙が出来る
//決めうちなら、システムモニタの「カウンタの追加」を参照
cpe.szMachineName = NULL;
cpe.szObjectName = "Process";
cpe.szInstanceName = "notepad";
cpe.szParentInstance = NULL;
cpe.dwInstanceIndex = 0;
cpe.szCounterName = "% Processor Time";
PdhMakeCounterPath(&cpe, path, &size, 0);
//カウンタをクエリーに追加
PdhAddCounter(hQuery, path, 0, &hCounter);
#if 1
//値取得
PdhCollectQueryData(hQuery);
//10秒間待つ
Sleep(10000);
//値取得
PdhCollectQueryData(hQuery);
#else
//こちらでもよいが、NT4では動かない
PdhCollectQueryDataEx(hQuery, 10, NULL);
#endif
//10秒間のメモ帳のCPUの使用率を取得
PdhGetFormattedCounterValue(hCounter, PDH_FMT_DOUBLE, NULL, &FmtValue);
printf("メモ帳のCPU使用率: %f%%\n", FmtValue.doubleValue);
//終了
PdhCloseQuery(hQuery);
}
追記:.NETでのパフォーマンスカウンタ fromMSDN
こちらはちゃんと日本訳されてます。Longhornを見据えて、そろそろクライアントアプリも.NETで開発してよいのかも。ただ現状では、.NET Frameworkが別配布&重いのが難点だけど…。
※:スパム対策しています。予想外のエラーが発生した場合は、コメント欄でご報告いただけると嬉しいです。
Trackback URL is >> |
- 必須な項目は"コメント"のみです
- 名前等は匿名でかまいません
- E-Mail/URLを記入した場合は公開されます
- HTMLタグは使用できません(実体参照に変換されます)
- コメント内のURLは自動的にリンクが張られます
- スパム対策のため、ひらがなの含まないコメントを書くことは出来ません
- HTTP Cookieを利用して、名前やE-Mail/URLの情報を記録させることが出来ます