读取远程计算机上的内存量时出现问题

本文关键字:问题 内存 计算机 读取 | 更新日期: 2023-09-27 17:48:54

我正在尝试确定计算机中安装的物理内存量。为了解决这个问题,我正在使用WMI(通过.net 4.0)及其服务。问题是,无论远程计算机具有多少内存,返回的值都是 4GB。这已在三台远程计算机上进行了测试:

  • 虚拟机, 1GB 内存, 视窗 2003
  • 物理机,2GB RAM,Windows XP
  • 物理机,2GB RAM,视窗 7 64 位

我自己正在运行物理机器,4GB RAM,Windows 7 64位。

显示代码:

uint phisicalMemorySize = 0;
ConnectionOptions co = new ConnectionOptions();
co.Username = null;
ManagementScope ms = new ManagementScope("''''" + computerName, co);
ObjectQuery q = new ObjectQuery("select TotalPhysicalMemory from Win32_ComputerSystem");
ManagementObjectSearcher os = new ManagementObjectSearcher(ms, q);
ManagementObjectCollection moc = os.Get();
foreach (ManagementObject o in moc)
{
    phisicalMemorySize += Convert.ToUInt64(o["TotalPhysicalMemory"], CultureInfo.InvariantCulture);
}

我也尝试使用select Capacity from Win32_PhysicalMemoryselect TotalVisibleMemorySize from Win32_OperatingSystem为查询,但无济于事。最后phisicalMemorySize将是4GB。

读取远程计算机上的内存量时出现问题

TotalPhysicalMemory 在 MSDN Library 文档中有一个响亮的免责声明:

物理内存的总大小。是 意识到在某些情况下, 此属性可能不会返回 物理的准确值 记忆。例如,它不是 如果 BIOS 正在使用某些 物理内存。对于准确的 值,在 中使用"容量"属性 Win32_PhysicalMemory相反。

Afaik,所有现代机器都将其 BIOS 复制到内存中。 我认为容量属性是机器中可用的内存量,而不是存在多少内存。 在任何 2 位操作系统上为 32 GB,在 64 位操作系统上为 4 GB 对于 32 位进程。 与列表<>相比。容量与计数属性。

我为TotalPhys获得了一个不错的价值,我知道我的笔记本电脑上有3千兆字节。 容量为 2 GB,与操作系统匹配。 WMI有时确实会变得片状,它并不完美。

使用 WMI 代码创建程序实用工具获取第二意见。 我认为它是一个 .NET 1.1 程序,因此如果您在 64 位操作系统上运行它,请注意它的结果。 如果使用 Visual Studio 2010,请注意项目中的平台目标设置。 它默认为 x86,因此即使在 64 位操作系统上,您也可以在 32 位模式下运行。 "项目 + 属性"、"生成"选项卡、"平台目标设置"。

发现问题。它与

ManagementScope ms = new ManagementScope("''''" + computerName, co);

线。正确的是

ManagementScope ms = new ManagementScope("''''" + computerName + "''root''CIMV2", co);

看起来它默认为本地计算机。

感謝 Hans 指導我 WMI Code Creator。这个工具真的帮了大忙。