如何获得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);