我正在制作一个显示一些硬件信息的软件, 以及其他信息。
我的问题是:
我使用这段代码,在另一个帖子中找到的方法: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 ...
谢谢!
答案 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});
结果为: