DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

メモリの合計サイズ、利用可能なメモリのサイズなどを取得する

コンピュータの物理メモリの合計サイズ、使用可能な物理メモリのサイズ、さらに、仮想メモリの合計サイズ、使用可能な仮想メモリのサイズを取得する方法を紹介します。

WMIを使用する方法

以下の例ではWMIを使って取得しています。

WMIはWindows2000以上のOSで使用できます。(それ以外のOSでもインストールすれば使用できます。こちらからダウンロードできるようです。

下の例ではSystem.Management.dllを参照設定に追加する必要があります。

VB.NET
コードを隠すコードを選択
Dim mc As New System.Management.ManagementClass("Win32_OperatingSystem")
Dim moc As System.Management.ManagementObjectCollection = mc.GetInstances()
Dim mo As System.Management.ManagementObject
For Each mo In moc
    '合計物理メモリ
    Console.WriteLine("合計物理メモリ:{0}KB", mo("TotalVisibleMemorySize"))
    '利用可能な物理メモリ
    Console.WriteLine("利用可能物理メモリ:{0}KB", mo("FreePhysicalMemory"))
    '合計仮想メモリ
    Console.WriteLine("合計仮想メモリ:{0}KB", mo("TotalVirtualMemorySize"))
    '利用可能な仮想メモリ
    Console.WriteLine("利用可能仮想メモリ:{0}KB", mo("FreeVirtualMemory"))

    '他のページをスワップアウトせずにページングファイルにマップできるサイズ
    Console.WriteLine("FreeSpaceInPagingFiles:{0}KB", mo("FreeSpaceInPagingFiles"))
    'ページングファイルに保存できる合計サイズ
    Console.WriteLine("SizeStoredInPagingFiles:{0}KB", mo("SizeStoredInPagingFiles"))
    'スワップスペースの合計サイズ
    'スワップスペースとページングファイルが区別されていなければ、NULL
    Console.WriteLine("TotalSwapSpaceSize:{0}KB", mo("TotalSwapSpaceSize"))

    mo.Dispose()
Next mo

moc.Dispose()
mc.Dispose()
C#
コードを隠すコードを選択
System.Management.ManagementClass mc =
    new System.Management.ManagementClass("Win32_OperatingSystem");
System.Management.ManagementObjectCollection moc = mc.GetInstances();
foreach (System.Management.ManagementObject mo in moc)
{
    //合計物理メモリ
    Console.WriteLine("合計物理メモリ:{0}KB", mo["TotalVisibleMemorySize"]);
    //利用可能な物理メモリ
    Console.WriteLine("利用可能物理メモリ:{0}KB", mo["FreePhysicalMemory"]);
    //合計仮想メモリ
    Console.WriteLine("合計仮想メモリ:{0}KB", mo["TotalVirtualMemorySize"]);
    //利用可能な仮想メモリ
    Console.WriteLine("利用可能仮想メモリ:{0}KB", mo["FreeVirtualMemory"]);

    //他のページをスワップアウトせずにページングファイルにマップできるサイズ
    Console.WriteLine("FreeSpaceInPagingFiles:{0}KB", mo["FreeSpaceInPagingFiles"]);
    //ページングファイルに保存できる合計サイズ
    Console.WriteLine("SizeStoredInPagingFiles:{0}KB", mo["SizeStoredInPagingFiles"]);
    //スワップスペースの合計サイズ
    //スワップスペースとページングファイルが区別されていなければ、NULL
    Console.WriteLine("TotalSwapSpaceSize:{0}KB", mo["TotalSwapSpaceSize"]);

    mo.Dispose();
}

moc.Dispose();
mc.Dispose();
注意:Windows 2000やWindows Server 2003では、上記の方法で正しく値を取得できない場合があります。詳しくは、「Some memory-related results that are returned from the Win32_OperatingSystem WMI class are incorrect in Windows 2000 and in Windows Server 2003」にあります。

.NET Framework 2.0以降で、My.Computer.Infoを使用する方法

.NET Framework 2.0以降のVB.NETでは、My.Computer.Infoのプロパティを使って取得することができます。My.Computer.Infoはバイト単位の値を返します。

VB.NET
コードを隠すコードを選択
'合計物理メモリ
Console.WriteLine("合計物理メモリ:{0}バイト", My.Computer.Info.TotalPhysicalMemory)
'利用可能な物理メモリ
Console.WriteLine("利用可能物理メモリ:{0}バイト", My.Computer.Info.AvailablePhysicalMemory)
'合計仮想メモリ
Console.WriteLine("合計仮想メモリ:{0}バイト", My.Computer.Info.TotalVirtualMemory)
'利用可能な仮想メモリ
Console.WriteLine("利用可能仮想メモリ:{0}バイト", My.Computer.Info.AvailableVirtualMemory)
C#
コードを隠すコードを選択
//参照にMicrosoft.VisualBasic.dllを追加する必要がある

Microsoft.VisualBasic.Devices.ComputerInfo info =
    new Microsoft.VisualBasic.Devices.ComputerInfo();

//合計物理メモリ
Console.WriteLine("合計物理メモリ:{0}バイト",info.TotalPhysicalMemory);
//利用可能な物理メモリ
Console.WriteLine("利用可能物理メモリ:{0}バイト", info.AvailablePhysicalMemory);
//合計仮想メモリ
Console.WriteLine("合計仮想メモリ:{0}バイト", info.TotalVirtualMemory);
//利用可能な仮想メモリ
Console.WriteLine("利用可能仮想メモリ:{0}バイト", info.AvailableVirtualMemory);
  • 履歴:
  • 2009/1/7 My.Computer.Infoの例で単位がKBになっていたのを修正。
  • 2009/10/22 SizeStoredInPagingFilesの後ろに";"が付いていたのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • 「???を参照に追加します」の意味が分からないという方は、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。