在Windows 10上以C#获取总安装的RAM

时间:2016-12-09 14:25:50

标签: c# memory ulong

我正在制作一个显示一些硬件信息的软件, 以及其他信息。

我的问题是:

我使用这段代码,在另一个帖子中找到的方法:https://stackoverflow.com/a/15790751/5782981

    public ulong InstalledRam { get; set; }

    InstalledRam = GetTotalMemoryInBytes();

    }

    static ulong GetTotalMemoryInBytes()
    {
        return new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;
    }

返回

8482025472

为了测试它我去了

MessageBox.Show(InstalledRam.ToString());

我已经看到了一些这方面的工作,也看到它不适用于fx。 Windows 7。

我安装了8 GB。

我想知道为什么返回值是84 ...

谢谢!

3 个答案:

答案 0 :(得分:1)

TotalPhysicalMemory以字节表示。 如果要将内存转换为GB,请使用以下示例:

Convert.ToInt32(InstalledRam/(1024*1024*1024));

答案 1 :(得分:0)

我想到我必须进行某种计算@easuter。

通过这样做:

var ram = InstalledRam / 1024 / 1024;
MessageBox.Show(ram.ToString());

这给了我8089,这是我可以使用的值。

由于

答案 2 :(得分:0)

最好只加载一次计算机信息。现在,使用Nuget可以https://www.nuget.org/packages/OSVersionInfo/

           public static class ComputerInformation
    {
        private static string _WindowsEdition;
        private static string _ComputerName;
        private static string _Processor;
        private static string _RAM;
        private static string _Model;

        private static void FillPCInfo()
        {
            ManagementObjectSearcher Search = new ManagementObjectSearcher();
            Search.Query = new ObjectQuery("Select * From Win32_ComputerSystem");
            foreach (ManagementObject obj in Search.Get())
            {
                _RAM = $"{Math.Round(Convert.ToDouble(obj["TotalPhysicalMemory"]) / (1024 * 1024 * 1024))} GB";
                _Model = obj["Model"]?.ToString();
                if (!string.IsNullOrWhiteSpace(_RAM))
                    break;
            }
        }

        public static string WindowsEdition
        {
            get
            {
                if (string.IsNullOrWhiteSpace(_WindowsEdition))
                    return _WindowsEdition = $"{JCS.OSVersionInfo.Name} {JCS.OSVersionInfo.Edition} {(JCS.OSVersionInfo.OSBits == JCS.OSVersionInfo.SoftwareArchitecture.Bit32 ? "x86" : "x64")} {JCS.OSVersionInfo.ServicePack}".Trim();
                return _WindowsEdition;
            }
        }
        public static string ComputerName
        {
            get
            {
                if (string.IsNullOrWhiteSpace(_ComputerName))
                    return _ComputerName = Environment.MachineName;
                return _ComputerName;
            }
        }

        public static string Processor
        {
            get
            {
                if (string.IsNullOrWhiteSpace(_Processor))
                {
                    ManagementObjectSearcher Search = new ManagementObjectSearcher();
                    Search.Query = new ObjectQuery("SELECT * FROM Win32_Processor");
                    var SearchResult = Search.Get();
                    foreach (ManagementObject obj in SearchResult)
                    {
                        _Processor = $"{obj["Name"]} {(SearchResult.Count > 1 ? "(2 processors)" : string.Empty)}".Trim();
                        if (!string.IsNullOrWhiteSpace(Processor))
                            break;
                    }
                    return _Processor;
                }
                return _Processor;
            }
        }

        public static string RAM
        {
            get
            {
                if (string.IsNullOrWhiteSpace(_RAM))
                {
                    FillPCInfo();
                    return _RAM;
                }
                return _RAM;
            }
        }

        public static string Model
        {
            get
            {
                if (string.IsNullOrWhiteSpace(_Model))
                {
                    FillPCInfo();
                    return _Model;
                }
                return _Model;
            }
        }
    }

然后,结果将仅在运行时加载一次。 打印列表框中的所有信息:

        listBox1.Items.AddRange(new string[] {ComputerInformation.WindowsEdition, ComputerInformation.ComputerName, ComputerInformation.Processor, ComputerInformation.PC.RAM, ComputerInformation.PC.Model});

结果为:

  • Windows 7 Ultimate x64 Service Pack1
  • 联想PC
  • 4 GB Ram
  • 联想T430