How to get total physical memory (ram) information in GB by WMI query?

前端 未结 3 2062
后悔当初
后悔当初 2020-12-18 16:31

I know how to get total physical memory from win32_computersystem class. but that comes in bytes or kb. I want this information in MB or GB. in wmi (wql) query. wmic also wo

相关标签:
3条回答
  • 2020-12-18 16:48

    You must convert the value of the property manually. Also is better use Win32_PhysicalMemory WMI class.

    Try this sample

    using System;
    using System.Collections.Generic;
    using System.Management;
    using System.Text;
    
    namespace GetWMI_Info
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                try
                {
                    ManagementScope Scope;
                    Scope = new ManagementScope(String.Format("\\\\{0}\\root\\CIMV2", "."), null);
    
                    Scope.Connect();
                    ObjectQuery Query = new ObjectQuery("SELECT Capacity FROM Win32_PhysicalMemory");
                    ManagementObjectSearcher Searcher = new ManagementObjectSearcher(Scope, Query);
                    UInt64 Capacity = 0;
                    foreach (ManagementObject WmiObject in Searcher.Get())
                    {
                        Capacity+= (UInt64) WmiObject["Capacity"];
                    }
                    Console.WriteLine(String.Format("Physical Memory {0} gb", Capacity / (1024 * 1024 * 1024))); 
                    Console.WriteLine(String.Format("Physical Memory {0} mb", Capacity / (1024 * 1024)));
                }
                catch (Exception e)
                {
                    Console.WriteLine(String.Format("Exception {0} Trace {1}", e.Message, e.StackTrace));
                }
                Console.WriteLine("Press Enter to exit");
                Console.Read();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-18 16:48

    you can convert TotalPhysicalMemory of Win32_ComputerSystem. Try this :

    using System;
    using System.Management;
    namespace WMISample
    {
        public class MyWMIQuery
        {
            public static void Main()
            {
                try
                {
                    ManagementObjectSearcher searcher =
                        new ManagementObjectSearcher("root\\CIMV2",
                        "SELECT TotalPhysicalMemory FROM Win32_ComputerSystem");
    
                    foreach (ManagementObject queryObj in searcher.Get())
                    { 
                        double dblMemory;
                        if(double.TryParse(Convert.ToString(queryObj["TotalPhysicalMemory"]),out dblMemory))
                        {
                            Console.WriteLine("TotalPhysicalMemory is: {0} MB", Convert.ToInt32(dblMemory/(1024*1024)));
                            Console.WriteLine("TotalPhysicalMemory is: {0} GB", Convert.ToInt32(dblMemory /(1024*1024*1024)));
                        }
                    }
                }
                catch (ManagementException e)
                {
    
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-18 17:04

    Wanted to make mention that I used the Win32_PhysicalMemory Capacity property until I met inconsistent results on Windows Server 2012. Now I use both properties (Win32_ComputerSystem:TotalPhysicalMemory and Win32_PhysicalMemory:Capacity) and choose the larger of the two.

    0 讨论(0)
提交回复
热议问题