Первая итерация счетчика всегда будет 0, потому что ему нечего сравнивать с последним значением.Попробуйте это:
var cpuload = new PerformanceCounter("Processor", "% Processor Time", "_Total");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Console.WriteLine(cpuload.NextValue() + "%");
Тогда вы увидите, что некоторые данные выходят.Это сделано для того, чтобы его можно было увидеть в постоянном графике или обновленном сценарии ... вот почему вы не часто сталкиваетесь с этой проблемой.
Вот справочник MSDN :
Метод nextValue () всегда возвращает значение 0 при первом вызове.Таким образом, вы должны вызвать этот метод во второй раз.