私は大規模なアプリケーションに取り組んでおり、2つの時点の間でCPUがどのようにロードされたかを知りたいと思っています。私は自分のプロセスだけでなく、すべてのプロセスに興味があります。
私の考えは、2つの期間の間のアイドルプロセスの合計CPU時間を取得することです。次に、その値をリアルタイムの差と比較します。次に、アイドルプロセスに費やされた平均%CPU時間、したがって実際のプロセスに費やされた平均%CPU時間を計算することができます。
例えば:
- リアルタイムサンプル:2012/07/30 13:56:1および2012/07/30 13:56:21
- アイドルプロセスの合計CPU時間サンプル:56:23:10および56:23:15
- リアルタイムの違い:20秒
- アイドルプロセスの合計CPU時間の違い:5秒
- アイドルプロセスの平均%CPU時間:25%
- 実際のプロセスの平均%CPU時間:75%
パフォーマンスへの影響をできるだけ少なくするために、2つのサンプルのみを取得します。最初に1つ、最後に1つ。
また、合計CPU負荷を計算するために他のプロセスを調べたくはなく、アイドルプロセスのみを調べます。(たとえば、他のプロセスの合計CPU時間の合計を計算したくない)
Kernel32.dllOpenProcessを使おうとしました。しかし、どうやらあなたはアイドルプロセスにアクセスすることはできません。ERROR_ACCESS_DENIED例外をスローします。
タスクマネージャがアイドルプロセスの合計CPU時間を表示するため、これが可能である必要があります。
注:プロセスの瞬時%CPU時間には関心がありません。後で平均を計算するための合計CPU時間のみ。