- - PR -
C# 物理メモリおよびスワップファイルの使用状況
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-29 15:38
物理メモリやスワップファイルの容量が不足しないか見極めるため、
物理メモリやスワップファイルの使用状況を常時監視したい。 できるだけ「軽い」方法が望ましいです。宜しくお願いします。 具体的には下記の6種類の値を取得したい。 どのクラスのどのプロパティ(あるいはメソッド)から算出すれば良いのでしょうか。 (1)Windowsが使用できる物理メモリの総容量 (2)物理メモリの空き容量 (3)カレントプロセスが占有している物理メモリの容量 (4)現在のスワップファイルの容量(の合計) (5)カレントプロセスが占有しているスワップファイルの容量(の合計) (6)現在のスワップファイルの空き容量(の合計) | ||||||||
|
投稿日時: 2005-11-29 17:39
C# を選択している時点で「ものすごく軽い」のとは程遠い世界かと。
WMI でほとんど取得できるような気がします。 | ||||||||
|
投稿日時: 2005-11-29 23:40
ご回答ありがとうございます。
すでにWMIを試みましたが、 常時監視目的ではWMIはWQLを経由するため オーバーヘッドが大き過ぎると感じました。 例えば物理メモリ関連ならProcessクラスやGCクラス等、 直接取得できるクラスのほうが有望そうに見えます。 ただ、Processクラスにしても、さまざまな値があるので、 どう計算して良いかよく理解できていません。 宜しくお願いします。 | ||||||||
|
投稿日時: 2005-11-30 06:29
リファレンスにそれぞれのプロパティがどのような値か、書いてあると思うのですが、それをどのように理解しているのでしょう?
_________________ | ||||||||
|
投稿日時: 2005-11-30 10:23
WMI でダメなら、いろんな API を呼び出して情報をかき集めることになりますね。 標準クラスライブラリだと、希望する情報を全部取得するのは難しいような気がします<ちゃんと調べてません 最終的に行き着くのは API ですが、この場合、パフォーマンスカウンタや PSAPI 辺りを使うことになると思います。 | ||||||||
|
投稿日時: 2005-11-30 13:57
ご回答ありがとうございます。
私なりに現在の理解度をまとめてみました。 アドバイスを宜しくお願いします。 ポイント ※WMIよりも高速な取得方法があれば、その方法を知りたい。 ※正しい値がどこから取得できるか知りたい。 (考え違いで誤った値を参照していないかも確認したい) (1)Windowsが使用できる物理メモリの総容量 Windowsタスクマネージャのパフォーマンスタグで表示される物理メモリの合計を 取得したいと思っています。 WMIのWin32_OperatingSystem.TotalVisibleMemorySizeです。 ★質問1-1 WQLは重いので、物理メモリ総容量について、 もっと軽い取得方法は無いでしょうか? (2) 物理メモリの空き容量 WMIのWin32_OperatingSystem.FreePhysicalMemoryです。 ★質問2-1 WQLは重いので、物理メモリの空き容量について、 もっと軽い取得方法は無いでしょうか? (3) カレントプロセスが占有している物理メモリの容量 Windowsタスクマネージャのプロセスタグで表示されるメモリ使用量を 知りたいと思っています。 ProcessクラスのNonpagedSystemMemorySize+PagedSystemMemorySize が算出できそうに思ったのですが、タスクマネージャの値と上記の値とは 異なっています。 ★質問3-1 NonpagedSystemMemorySize+PagedSystemMemorySizeでは駄目なのでしょうか。 あるいはGC.GetTotalMemory(bool)を参照すべきなのでしょうか? あるいは別の値でしょうか? (4)現在のスワップファイルの容量(の合計) WMIのWin32_OperatingSystem.SizeStoredInPagingFilesから物理メモリ合計 を差し引いた値が設定したスワップファイルの容量と合致するはずですが、 結果がずれています。 例 RAM 1GB実装、スワップファイル最大値=4096KB/最小値=4096KBに設定したマシンで タスクマネージャの物理メモリ合計は1047344KBと表示されている。 さて、SizeStoredInPagingFilesの値を見ると5140752KBになっている。 1047344(使用可能物理メモリ)を差し引くと4093408KBになる。 4096x1024(スワップファイル)=4194304KBになるはずである。 ★質問4-1 Win32_OperatingSystem.SizeStoredInPagingFilesでは駄目なのでしょうか。 ★質問4-2 WQLは重いので、現在のスワップファイルの容量について、 もっと軽い取得方法は無いでしょうか? (5)カレントプロセスが占有しているスワップファイルの容量(の合計) ★質問5-1 Processクラスあたりだと思いますが、どのプロパティ値を見ればよいか分かりません。 (6)現在のスワップファイルの空き容量(の合計) ★質問6-1 WMIのWin32_OperatingSystem.FreeSpaceInPagingFilesで正しいでしょうか? ★質問6-2 WQLは重いので、現在のスワップファイルの空き容量について、 もっと軽い取得方法は無いでしょうか? | ||||||||
|
投稿日時: 2005-11-30 14:30
WMIの抽出ロジック(WQL)自体を改善することも検討したいと思います。
WQLの改善まで本議題に含めると質問自体の範囲が広がりすぎるので、 WQLによる最適な抽出方法については別議題を立てます。 本議題ではWQLの抽出ロジックの改善以外について回答願います。 宜しくお願いします。 | ||||||||
|
投稿日時: 2005-11-30 21:59
WMIが何かを知らないで書くのでとてもピントはずれなのかもと思いますが
こんなサンプルは、多少でもお役に立ちますか???
まったくのピントはずれでしたら、なにとぞご容赦を。 |