需要获取系统的总物理内存量及剩余内存量。
 参考了sno888在2008-9-8回复“准确获取内存”的内容,编写的代码如下:
ManagementClass memo = new ManagementClass("Win32_OperatingSystem");
ManagementObjectCollection memoVol = memo.GetInstances();
double capacity = 0;
foreach (ManagementObject mo in memoVol)
{
  capacity += ((Math.Round(Int64.Parse(mo.Properties["FreePhysicalMemory"].Value.ToString()) / 1024 / 1024 / 1024.0, 1)));
}
 运行上述代码,得到的capacity值为0,是何原因?请教各位高手^^

解决方案 »

  1.   

    试试这个http://www.soaspx.com/dotnet/csharp/csharp_20111125_8322.html
      

  2.   


    MEMORYSTATUS ms = new MEMORYSTATUS();
    NativeMethods.GlobalMemoryStatus(out ms);
    MessageBox.Show((ms.dwTotalPhys/1024/1024).ToString());[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
        public struct MEMORYSTATUS
        {        /// DWORD->unsigned int
            public uint dwLength;        /// DWORD->unsigned int
            public uint dwMemoryLoad;        /// SIZE_T->ULONG_PTR->unsigned int
            public uint dwTotalPhys;        /// SIZE_T->ULONG_PTR->unsigned int
            public uint dwAvailPhys;        /// SIZE_T->ULONG_PTR->unsigned int
            public uint dwTotalPageFile;        /// SIZE_T->ULONG_PTR->unsigned int
            public uint dwAvailPageFile;        /// SIZE_T->ULONG_PTR->unsigned int
            public uint dwTotalVirtual;        /// SIZE_T->ULONG_PTR->unsigned int
            public uint dwAvailVirtual;
        }    public partial class NativeMethods
        {        /// Return Type: void
            ///lpBuffer: LPMEMORYSTATUS->_MEMORYSTATUS*
            [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GlobalMemoryStatus")]
            public static extern void GlobalMemoryStatus([System.Runtime.InteropServices.OutAttribute()] out MEMORYSTATUS lpBuffer);    }