【问题标题】:Problem reading amount of memory on remote computer远程计算机上读取内存量的问题
【发布时间】:2011-07-30 19:58:49
【问题描述】:

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

  • 虚拟机,1GB RAM,Windows 2003
  • 物理机,2GB RAM,Windows XP
  • 物理机,2GB RAM,Windows 7 64bit

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

显示代码:

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_OperatingSystemas 查询但无济于事。最后phisicalMemorySize 总是4GB。

【问题讨论】:

    标签: c# wmi


    【解决方案1】:

    发现问题。它与

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

    线。正确的应该是

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

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

    感谢 Hans 向我介绍了 WMI Code Creator。这个工具真的帮了大忙。

    【讨论】:

      【解决方案2】:

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

      物理内存的总大小。是 意识到在某些情况下, 此属性可能不会返回 准确的物理值 记忆。例如,它不是 如果 BIOS 正在使用某些 物理内存。为了准确 值,使用容量属性 取而代之的是 Win32_PhysicalMemory。

      Afaik,所有现代机器都将其 BIOS 复制到内存中。我认为容量属性是机器中有多少内存可用,而不是存在多少。在任何 32 位操作系统上为 2 GB,在 64 位操作系统上为 32 位进程为 4 GB。与 List.Capacity vs Count 属性进行比较。

      TotalPhys 物有所值,我知道我的笔记本电脑上有 3 GB。容量为 2 GB,与操作系统相匹配。 WMI 有时确实会变得不稳定,它并不完美。

      使用WMI Code Creator utility 获得第二意见。我认为它是一个 .NET 1.1 程序,因此如果您在 64 位操作系统上运行它,请注意其结果。如果您使用 Visual Studio 2010,请注意项目中的平台目标设置。它默认为 x86,因此您将在 32 位模式下运行,即使在 64 位操作系统上也是如此。项目+属性,构建选项卡,平台目标设置。

      【讨论】:

      • 我相信你对容量的看法是错误的。它返回每根棍子 (click) 的容量,当然假设 WMI 内部没有任何变化。 RAM中的BIOS有多大? 100 MB?这不应该过多地扭曲我的结果。您使用什么类和属性在笔记本电脑中获得提到的 3 GB?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多