一尘不染

您如何获得计算机具有的RAM总量?

c#

使用C#,我想获取计算机拥有的RAM总量。使用PerformanceCounter,我可以通过设置以下内容来获得可用内存的数量:

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

但是我似乎找不到找到总内存量的方法。我将如何去做呢?

更新:

MagicKat:我在搜索时看到了,但是不起作用-“您是否缺少程序集或参考?”。我曾试图将其添加到参考文献中,但在那儿看不到它。


阅读 332

收藏
2020-05-19

共1个答案

一尘不染

p /调用方式 EDIT :更改为GlobalMemoryStatusEx以提供准确的结果(heh)

  [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);

然后使用像:

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

或者,您可以使用WMI(受管但速度较慢)在“ Win32_ComputerSystem”类中查询“ TotalPhysicalMemory”。

*根据joel-llamaduck.blogspot.com的注释 *编辑 固定代码

2020-05-19