Счетчик производительности C # и HyperPi - PullRequest
0 голосов
/ 04 января 2011

Я пытаюсь правильно прочитать показания использования процессора.Приведенный ниже код выполняется без проблем, но я не могу получить показание загрузки ЦП при 100% при запуске Hyper PI, который является многоядерным стресс-тестом ЦП.Что я сделал не так?Спасибо за потраченное время.

В качестве альтернативы, можно ли получить показания использования ЦП из WMI?

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace TestHarnessCPUUsage
{
    class Program
    {
        static void Main(string[] args)
        {
            PerformanceCounter cpuCounter;
            PerformanceCounter ramCounter;

            cpuCounter = new PerformanceCounter();

            cpuCounter.CategoryName = "Processor";
            cpuCounter.CounterName = "% Processor Time";
            cpuCounter.InstanceName = "_Total";

            ramCounter = new PerformanceCounter("Memory", "Available MBytes");
            ramCounter.CategoryName = "Memory";
            ramCounter.CounterName = "Available MBytes";

            Console.WriteLine(cpuCounter.NextValue()

+ "%");Console.WriteLine (ramCounter.NextValue () + "МБ");

            Console.ReadKey();
        }


    }
}

1 Ответ

1 голос
/ 04 января 2011

Это тот тип счетчика перфорирования, который вы должны попробовать сами.Время процессора - это мера за интервал.Он говорит вам, как долго процессор был выключен, в то время как он работает на 100%.Отношение - это значение, которое вы получаете, умноженное на 100. Одна секунда - это типичное время интервала, как в TaskMgr.exe и Perfmon.Чем меньше интервал, тем «шумнее» он становится.Вплоть до одной выборки, как вы сделали, где вы вообще не получаете данных, поскольку не было интервала.Исправить:

using System;
using System.Diagnostics;

class Program {
    static void Main(string[] args) {
        PerformanceCounter cpuCounter;
        cpuCounter = new PerformanceCounter();
        cpuCounter.CategoryName = "Processor";
        cpuCounter.CounterName = "% Processor Time";
        cpuCounter.InstanceName = "_Total";
        cpuCounter.NextValue();
        while (!Console.KeyAvailable) {
            System.Threading.Thread.Sleep(1000);
            Console.WriteLine(cpuCounter.NextValue());
        }
    }
}
...