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::Is ProcessorId はすべてのコンピューターで一意です

于 2013-06-24T10:23:45.040 に答える