1. ホーム
  2. c#

[解決済み] コンピュータに搭載されているRAMの総量はどのようにして知ることができますか?

2023-03-10 03:11:34

質問

C#を使用して、私のコンピュータが持っているRAMの総量を取得したいと思います。 PerformanceCounterを使用して、私は設定することによって、利用可能なラムの量を得ることができます。

counter.CategoryName = "Memory";
counter.Countername = "Available MBytes";

しかし、私はメモリの総量を取得する方法を見つけることができないようです。 どうすればいいのでしょうか?

更新しました。

MagicKat: 検索しているときに見ましたが、うまくいきません - "アセンブリまたはリファレンスが不足していますか?"。それをリファレンスに追加しようと探したのですが、見当たりません。

どのように解決するのですか。

Windows API関数 GlobalMemoryStatusEx は、p/invokeで呼び出すことができます。

  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
  private class MEMORYSTATUSEX
  {
     public uint dwLength;
     public uint dwMemoryLoad;
     public ulong ullTotalPhys;
     public ulong ullAvailPhys;
     public ulong ullTotalPageFile;
     public ulong ullAvailPageFile;
     public ulong ullTotalVirtual;
     public ulong ullAvailVirtual;
     public ulong ullAvailExtendedVirtual;
     public MEMORYSTATUSEX()
     {
        this.dwLength = (uint)Marshal.SizeOf(typeof(NativeMethods.MEMORYSTATUSEX));
     }
  }


  [return: MarshalAs(UnmanagedType.Bool)]
  [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer);

では、likeを使用します。

ulong installedMemory;
MEMORYSTATUSEX memStatus = new MEMORYSTATUSEX();
if( GlobalMemoryStatusEx( memStatus))
{ 
   installedMemory = memStatus.ullTotalPhys;
}

あるいは、WMI (マネージドだが遅い) を使って、以下のような問い合わせをすることもできます。 TotalPhysicalMemory の中にある Win32_ComputerSystem クラスに追加します。