0

我想使用 WMI 在 .NET 中获取 id 处理器,但是当我使用 ManagementObjectSearcher 中的 get() 方法时,我遇到了内存不足异常...

如果您想从代码中查看,请参见下文:

   ManagementObjectSearcher searcher = new ManagementObjectSearcher(
                "select * from Win32_Processor");

            foreach (ManagementObject share in searcher.Get())
                foreach (PropertyData PC in share.Properties)
                    if (PC.Name.Equals("ProcessorId"))
                        return (string)PC.Value;

            return null;

此代码适用于其他计算机,但不适用于我的计算机...

我正在使用Windows 7。

问题是什么 ?

我试图重新启动 WMI 服务,但这并不能解决我的问题 :(

4

1 回答 1

2

有几个原因可能导致内存不足异常。

  1. WMI 中可能存在内存泄漏,来源: http ://brooke.blogs.sqlsentry.net/2010/02/win32service-memory-leak.html
  2. 检查您是否有权限,这将解释为什么您的代码可以在某些计算机上运行,​​而为什么不能在您的计算机上运行。
  3. 以管理员身份运行您的代码(用于调试以管理员身份启动 VS)
  4. 这是另一个代码片段,也试试这个......谁知道

样本:

public static String GetCPUId()
{
    String processorID = "";

    ManagementObjectSearcher searcher = new ManagementObjectSearcher(
        "Select * FROM WIN32_Processor");

    ManagementObjectCollection mObject = searcher.Get();

    foreach (ManagementObject obj in mObject)
    {
        processorID = obj["ProcessorId"].ToString();
    }

    return processorID;
}

来源:WIN32_Processor::所有计算机的 ProcessorId 是否唯一

于 2013-06-24T10:23:45.040 回答