4

しばらくこれを探していて、ここの誰かが私の質問に答えてくれることを願っています。そのため、平均CPU 使用率を 2 または 4 コアにするための最良の方法を見つけようとしています。現在、私が知る限り、単一のコアの使用状況のみを返すパフォーマンス カウンターを使用しています。理想的には、タスク マネージャーの使用状況バーと一致するか、少なくとも似ていることを望みます。WMI クエリを調べましたが、最善のアプローチについて明確にしたいと考えていました。私は現在、ハイパースレッディングを備えた、つまり「8」コアを備えたi7を使用しています。これが大きな違いを生むかどうかはわかりませんが、そうかもしれません。ご指摘ありがとうございます

4

1 に答える 1

7

を使用すると、システム上のすべてのコア/スレッドのインスタンスをそれぞれの使用法で提供Win32_PerfFormattedData_Counters_ProcessorInformationするフィールドを使用できます。PercentProcessorTime

これを自分で試してみたところ、8 つのスレッドに対して 8 つの管理オブジェクトが得られました。

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_PerfFormattedData_Counters_ProcessorInformation instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("PercentProcessorTime: {0}", queryObj["PercentProcessorTime"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

アップデート:

それはちょっと嘘だった、私は 10 のインスタンスを得た。彼らの名前は次のとおりです。

  1. _合計
  2. 0,_合計
  3. 0,7
  4. 0,6
  5. 0,5

where句で必要なものを除外する必要があります。

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation WHERE NOT Name='_Total' AND NOT Name='0,_Total'

于 2012-07-04T08:37:47.857 に答える