#author("2020-05-10T09:57:18+09:00;2020-02-01T17:14:58+09:00","","")
#author("2020-05-10T09:57:51+09:00;2020-02-01T17:14:58+09:00","","")
#navi(../)
* WMIを使って物理メモリ・仮想メモリの使用量等を取得する [#ca6b646f]
WMIを使ってWMI ClassのWin32_OperatingSystemからメモリの使用量等を取得し表示するコンソールアプリケーションになります。~
尚、コンソールアプリケーションを動かすには参照にて''System.Management''を参照追加する必要があります。~

#contents

* 動作確認環境 [#o8a46bf7]
- Windows 10 ver.1909
- Visual Studio 2019
- .NET Framework 4.7.2
- コンソールアプリケーション

#htmlinsert(windev-top.html)


* 関連記事 [#l053efca]
-[[CPU使用率を取得するサンプルコード>.NET/CPU使用率を取得する]]
-[[CPUコア毎の使用率を取得するサンプルコード>.NET/CPUコア毎の使用率を取得する]]

* 関連サイト [#kdaa7289]
-[[Microsoft .NET ManagementClass クラス>https://docs.microsoft.com/ja-jp/dotnet/api/system.management.managementclass]]

#htmlinsert(windev-top.html)

* 参照追加 [#u59cbf8d]
''System.Management''を参照に追加しないと以下のように&color(red){赤の波線};が表示されます。
#ref(11.png)
#br

** ''System.Management''の参照追加手順 [#xaab5e4a]
''System.Management''を参照追加するにあたり、以下の手順で追加を行いました。
+ 参照を右クリック
#ref(01.png)
#br
+ 参照マネージャーが表示されるので「アセンブリ」になっていることを確認し、~
検索ボックスに''System.Management''を入力します。
+ チェックを入れ「OK」ボタンをクリックします。
#ref(02.png)
#br
+以上の操作で''System.Management''の参照追加は完了です。

* サンプルコード [#z925f522]
以下に C#, Visual Basic(VB) のサンプルコードと実行結果を記します。

** C# サンプルコード [#u3c86072]
 using System;
 
 class Program
 {
     static void Main(string[] args)
     {
         while (true)
         {
             using (System.Management.ManagementClass smmc = new System.Management.ManagementClass("Win32_OperatingSystem"))
             using (System.Management.ManagementObjectCollection smc = smmc.GetInstances())
             {
                 foreach (System.Management.ManagementObject smmo in smc)
                     using (smmo)
                     {
                         UInt64 TotalVisibleMemorySize = (UInt64)smmo["TotalVisibleMemorySize"];
                         UInt64 FreePhysicalMemory = (UInt64)smmo["FreePhysicalMemory"];
                         UInt64 TotalVirtualMemorySize = (UInt64)smmo["TotalVirtualMemorySize"];
                         UInt64 FreeVirtualMemory = (UInt64)smmo["FreeVirtualMemory"];
 
                         Console.WriteLine("合計物理メモリ(TotalVisibleMemorySize) = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB",
                             TotalVisibleMemorySize,
                             TotalVisibleMemorySize / 1024f,
                             TotalVisibleMemorySize / 1024f / 1024f
                             );
                         Console.WriteLine("利用可能物理メモリ(FreePhysicalMemory) = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB",
                             FreePhysicalMemory,
                             FreePhysicalMemory / 1024f,
                             FreePhysicalMemory / 1024f / 1024f
                             );
                         Console.WriteLine("合計仮想メモリ(TotalVirtualMemorySize) = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB",
                             TotalVirtualMemorySize,
                             TotalVirtualMemorySize / 1024f,
                             TotalVirtualMemorySize / 1024f / 1024f
                             );
                         Console.WriteLine("利用可能仮想メモリ(FreeVirtualMemory)  = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB",
                             FreeVirtualMemory,
                             FreeVirtualMemory / 1024f,
                             FreeVirtualMemory / 1024f / 1024f
                             );
                     }
             }
             System.Threading.Thread.Sleep(1000);
             Console.Clear();
         }
     }
 }

** Visual Basic(VB) サンプルコード [#nca661cb]
 Module Module1
 
     Sub Main()
         While True
 
             Using smmc As System.Management.ManagementClass = New System.Management.ManagementClass("Win32_OperatingSystem")
 
                 Using smc As System.Management.ManagementObjectCollection = smmc.GetInstances()
 
                     For Each smmo As System.Management.ManagementObject In smc
 
                         Using smmo
                             Dim TotalVisibleMemorySize As UInt64 = CULng(smmo("TotalVisibleMemorySize"))
                             Dim FreePhysicalMemory As UInt64 = CULng(smmo("FreePhysicalMemory"))
                             Dim TotalVirtualMemorySize As UInt64 = CULng(smmo("TotalVirtualMemorySize"))
                             Dim FreeVirtualMemory As UInt64 = CULng(smmo("FreeVirtualMemory"))
                             Console.WriteLine("合計物理メモリ(TotalVisibleMemorySize) = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB", TotalVisibleMemorySize, TotalVisibleMemorySize / 1024.0F, TotalVisibleMemorySize / 1024.0F / 1024.0F)
                             Console.WriteLine("利用可能物理メモリ(FreePhysicalMemory) = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB", FreePhysicalMemory, FreePhysicalMemory / 1024.0F, FreePhysicalMemory / 1024.0F / 1024.0F)
                             Console.WriteLine("合計仮想メモリ(TotalVirtualMemorySize) = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB", TotalVirtualMemorySize, TotalVirtualMemorySize / 1024.0F, TotalVirtualMemorySize / 1024.0F / 1024.0F)
                             Console.WriteLine("利用可能仮想メモリ(FreeVirtualMemory)  = {0,6:d}KB {1,3:f2}MB {2,3:f2}GB", FreeVirtualMemory, FreeVirtualMemory / 1024.0F, FreeVirtualMemory / 1024.0F / 1024.0F)
                         End Using
                     Next
                 End Using
             End Using
 
             System.Threading.Thread.Sleep(1000)
             Console.Clear()
         End While
     End Sub
 
 End Module

** 実行結果 [#v856fd7b]
上記サンプルコードの実行結果(キャプチャ)になります。~
#ref(12.png)


以上、WMIを使ってメモリの使用量等を取得するサンプルコードでした。

#htmlinsert(windev-btm.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS