Syndication
Search


クリエイティブ・コモンズ・ライセンス

Movable Type 2.661
Amazon Search

パフォーマンスの取得

システムモニタや、タスクマネージャの「プロセス」タブ等で、表示される「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が別配布&重いのが難点だけど…。

Similarity Search
Trackback
このエントリにTrackBackするには、以下のURLにTrackBack pingを送ってください。
※:スパム対策しています。予想外のエラーが発生した場合は、コメント欄でご報告いただけると嬉しいです。

Trackback URL is >>
Comments
Post a comment
このエントリに対してコメントを追加するには、以下フォームに記入して [追加]ボタンを押下してください。
  • 必須な項目は"コメント"のみです
  • 名前等は匿名でかまいません
  • E-Mail/URLを記入した場合は公開されます
  • HTMLタグは使用できません(実体参照に変換されます)
  • コメント内のURLは自動的にリンクが張られます
  • スパム対策のため、ひらがなの含まないコメントを書くことは出来ません
  • HTTP Cookieを利用して、名前やE-Mail/URLの情報を記録させることが出来ます
名前/E-Mail/URLを記録しますか?