特定のプロセスの使用メモリを表示したい。

タグの編集
投稿者 ジョニーゲップ  (社会人) 投稿日時 2011/3/26 21:51:40
特定のプロセスの使用メモリを表示するにはどうすればいいでしょうか。
タスクマネージャのデータを読み込む、みたいなことが出来ればいいのですがそのような方法は見つけられませんでした。

知っている方がいましたらご教授お願いします。
投稿者 るきお  (社会人) 投稿日時 2011/3/26 22:34:40
いくつかの方法はありますが、PerformanceCounterクラスを使う方法が手軽だと思います。

次の例はPerformanceCounterクラスを使ってdevenvというプロセスの使用メモリ量を表示します。

Dim monitor As New PerformanceCounter
monitor.CategoryName = "Process"
monitor.CounterName = "Working set - private"
monitor.InstanceName = "devenv"

MsgBox(monitor.RawValue \ 1024 & "K")


PerformanceCounterはコントロールでもあるので、デザイン時にTimerなどと同じように貼り付けてプロパティウィンドウで設定して使うこともできます。
投稿者 ジョニーゲップ   (社会人) 投稿日時 2011/3/26 22:52:02
Firefox(プロセス名 : firefox.exe)を調べたいとき、

Dim monitor As New PerformanceCounter
monitor.CategoryName = "Process"
monitor.CounterName = "Working set - private"
monitor.InstanceName = "firefox.exe"

MsgBox(monitor.RawValue \ 1024 & "K")


としてみましたがカテゴリの中に「firefox.exe」がありませんと表示されてしまいます。
プロセス名の指定方法などに決まりはあるのでしょうか
投稿者 ジョニーゲップ  (社会人) 投稿日時 2011/3/26 23:02:39
すみません。
「firefox」としてみたところ成功しました

ありがとうございました
投稿者 ジョニーゲップ  (社会人) 投稿日時 2011/3/26 23:07:26
すみません。
MsgBox(monitor.RawValue \ 1024 & "K")


このコードの「\」はどのような役割を果たしているのでしょうか
投稿者 るきお  (社会人) 投稿日時 2011/3/26 23:26:05
¥は割り算の商を返します。
だから、 \ 1024 は 1024で割った商を求める計算です。

>プロセス名の指定方法などに決まりはあるのでしょうか 
ありますよ。
タスクマネージャで表示されるプロセス名を指定してください。
投稿者 ジョニーゲップ  (社会人) 投稿日時 2011/3/26 23:39:20
何度も質問すみません。

何故1024で割った余りをだすのでしょうか。
KB換算するにしても余りを利用する意味が分かりません。

不躾ですが回答お願いします。
投稿者 るきお  (社会人) 投稿日時 2011/3/26 23:45:22
>何故1024で割った余りをだすのでしょうか。
あまりではなく、答えの整数部分を求めています。

9 ÷ 4 =  2 … 1

を例にとると、VBでは、
9 \ 4 = 2
9 mod 4 = 1
9 / 4 = 2.25
になります。

今回はKB換算して小数点以下を取り除きたかったので、はじめから商だけ求めればよく、
\を使いました。
計算速度も / と比べると格段に速いです。

ひょっとして、私は「商」という言葉の使い方を間違っているんでしょうか??
投稿者 数学  (社会人) 投稿日時 2011/3/29 08:38:29
> ひょっとして、私は「商」という言葉の使い方を間違っているんでしょうか??
いえ、合ってると思います。
「商」は割り算の答えのことで、「余り」ではありません。
「余り」を漢字で表現するなら「剰余」です。

・倍数・約数と余り
http://www.nhk.or.jp/kokokoza/tv/suugakukiso/archive/suukiso_03.pdf
投稿者 shu  (社会人) 投稿日時 2011/3/29 10:30:16
整数の範囲で割り算を行う場合の商という意味で正しいです。

ただし、数の範囲を有理数とか実数とか複素数とかに広げた場合、
その範囲内での割り算の答えとなるので違ってきます。

一般的には今回使われた整数範囲での割り算について使われることが多いかと思います。