【问题标题】:How to get total physical memory (ram) information in GB by WMI query?如何通过 WMI 查询以 GB 为单位获取总物理内存 (ram) 信息?
【发布时间】:2013-04-16 15:38:25
【问题描述】:

我知道如何从 win32_computersystem 类获取总物理内存。但这以字节或 kb 为单位。我想要以 MB 或 GB 为单位的信息。在 wmi (wql) 查询中。 wmic 也可以。提前致谢。

【问题讨论】:

  • 那么,你为什么不自己转换呢? (如果你正在编码,在代码中,否则,用公式或类似的东西将它粘贴到 Excel...)
  • 如果您可能正在寻找其他方法来获取 RAM 大小:commonfixes.com/2014/12/…

标签: windows wmi wmic wql


【解决方案1】:

您必须手动转换属性的值。也最好使用Win32_PhysicalMemory WMI 类。

试试这个示例

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();
        }
    }
}

【讨论】:

    【解决方案2】:

    您可以转换 TotalPhysicalMemoryWin32_ComputerSystem。试试这个:

    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)
                {
    
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      想提一下,我使用 Win32_PhysicalMemory Capacity 属性,直到在 Windows Server 2012 上遇到不一致的结果。现在我使用这两个属性(Win32_ComputerSystem:TotalPhysicalMemory 和 Win32_PhysicalMemory:Capacity)并选择两者中的较大者。

      【讨论】:

      • 欢迎来到 Stack Overflow!这实际上是一条评论,不是对原始问题的回答。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
      猜你喜欢
      • 2018-12-01
      • 2011-08-06
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-05
      • 2010-12-05
      • 1970-01-01
      相关资源
      最近更新 更多