如何获得C#中的总物理内存?

我使用GlobalMemoryStatusEx函数来检索有关内存的信息,但此函数无法正常工作。 它为所有属性返回0。 我不认为这个function在我的Windows 7环境中有效。

  [StructLayout(LayoutKind.Sequential)] internal struct MEMORYSTATUSEX { internal uint dwLength; internal uint dwMemoryLoad; internal ulong ullTotalPhys; internal ulong ullAvailPhys; internal ulong ullTotalPageFile; internal ulong ullAvailPageFile; internal ulong ullTotalVirtual; internal ulong ullAvailVirtual; internal ulong ullAvailExtendedVirtual; } [return: MarshalAs(UnmanagedType.Bool)] [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] internal static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer); private void btnGlobalMemoryStatusEX_Click(object sender, EventArgs e) { MEMORYSTATUSEX statEX = new MEMORYSTATUSEX(); GlobalMemoryStatusEx(ref statEX); double d = (double)statEX.ullTotalPhys; } 

任何人都可以告诉我错误的代码出错了吗?

我发现自己的错误来自: http : //www.pinvoke.net/default.aspx/kernel32/GlobalMemoryStatusEx.html

我变了

 internal static extern bool GlobalMemoryStatusEx(ref MEMORYSTATUSEX lpBuffer); 

 static extern bool GlobalMemoryStatusEx([In, Out] MEMORYSTATUSEX lpBuffer); 

并改变了

 GlobalMemoryStatusEx(ref statEX); 

 GlobalMemoryStatusEx(statEX); 

它工作正常。 坦克

怎么样:

 My.Computer.Info.TotalPhysicalMemory My.Computer.Info.AvailablePhysicalMemory 

如果c#你可以:

引用Microsoft.VisualBasic程序集。 然后导入Microsoft.VisualBasic.Devices命名空间。
最后使用ComputerInfo获取总物理内存。

 int bytesPerMebibyte = (1 << 20); // http://physics.nist.gov/cuu/Units/binary.html ComputerInfo myCompInfo = new ComputerInfo(); string physicalMemory = "Physical Memory: " + (myCompInfo.TotalPhysicalMemory / bytesPerMebibyte) + " MB"; 

你可以使用这个模板:

 long memory = Process.GetCurrentProcess().PeakVirtualMemorySize64; 

另一个名为Peak * 64的属性

您在调用GlobalMemoryStatusEx之前忘记设置statEX.dwLength

 MEMORYSTATUSEX statEX = new MEMORYSTATUSEX(); statEX.dwLength = (uint)Marshal.SizeOf(typeof(MEMORYSTATUSEX)); GlobalMemoryStatusEx(ref statEX);