Как получить использование ЦП каждого процессора в С#?

Я хочу измерить загрузку каждого процессора.

Когда я запускаю следующую программу, я получаю имя экземпляра 2, 3, 0, 1 и _Total. Я думал, что должен получить 0, 1, 0,_Total, 1,_Total.

Что означает результат? Как получить общее использование процессора для каждого процессора. Не каждое ядро?

 class PerfMonitor
{
    static void Main()
    {
        var pc = new PerformanceCounter("Processor", "% Processor Time");
        var cat = new PerformanceCounterCategory("Processor");
        var instances = cat.GetInstanceNames();

        foreach (var s in instances)
        { 
            pc.InstanceName = s;
            Console.WriteLine("instance name is {0}", s);
        }
    }
}

person ericyoung    schedule 10.01.2013    source источник
comment
Я не думаю, что операционные системы разбивают вещи по ЦП — у каждого системного монитора, который я видел, были варианты только для просмотра каждого ядра или для просмотра суммы всего.   -  person Bobson    schedule 10.01.2013
comment
У вас есть 4 ядра процессора, поэтому у вас есть счетчики для каждого отдельного ядра и для их суммы. Трудно догадаться, что вы имели в виду под 0,_Total.   -  person Hans Passant    schedule 10.01.2013
comment
может быть, у вас есть двухъядерная машина Intel, поэтому из-за гиперпоточности она может показывать 4 ядра и использование каждого ядра.   -  person prthrokz    schedule 10.01.2013
comment
В качестве дополнения этот источник предполагает, что нет никакой практической разницы между многоядерным и многопроцессорным процессором, поэтому попытка сгруппировать по Процессор, вероятно, не имеет значения.   -  person Bobson    schedule 10.01.2013
comment
@ханс-пассант. 0, Всего я получил что-то из этого ссылка   -  person ericyoung    schedule 10.01.2013
comment
Парень, вероятно, имеет более одного процессора в своей машине. Вы не знаете.   -  person Hans Passant    schedule 10.01.2013


Ответы (3)


Поскольку Windows рассматривает ядра как процессоры, сделать это непросто. Вы можете начать с попытки определить количество физических CPU, но это непростая задача.

person Andy West    schedule 10.01.2013

Что означает результат?

Ваш результат таков:

instance name is 2
instance name is 3
instance name is 0
instance name is 1
instance name is 6
instance name is 7
instance name is 4
instance name is 5
instance name is _Total

Каждый экземпляр является логическим идентификатором процессора (включая логические идентификаторы Hyper-V), за исключением последнего, который является кумулятивным экземпляром всех процессоров в системе.

person ΩmegaMan    schedule 10.01.2013
comment
Мне кажется у тебя 8 ядер. - person ericyoung; 11.01.2013
comment
@ericyoung да, это мои, это 4 физических ядра и 4 логических ядра. - person ΩmegaMan; 11.01.2013

Загрузите OpenHardwareMonitor, он с открытым исходным кодом и содержит dll, которую вы можете использовать для этого.

person Kris    schedule 22.02.2013