Как преобразовать выходные данные счетчика производительности в значение int в c#

#c# #performance #int #counter

#c# #Производительность #int #счетчик

Вопрос:

У меня возникает ошибка, когда я пытаюсь отобразить текущее использование процессора и памяти с помощью индикатора выполнения. Код кажется правильным, поскольку он работает с меткой, но я получаю сообщение об ошибке «Не удается преобразовать в int», так как я могу преобразовать данные счетчика производительности в int, чтобы их можно было отобразить в индикаторе выполнения? Я пытался использовать System.Convert.ToInt32(cpuCounter); , но у меня ничего не получилось. Вот мой код:

 PerformanceCounter ramCounter;
        ramCounter = new PerformanceCounter("Memory", "Available MBytes");
        ramCounter.NextValue();
        progressBar1.Value = ramCounter;

        PerformanceCounter cpuCounter;
        cpuCounter = new PerformanceCounter();
        cpuCounter.CategoryName = "Processor";
        cpuCounter.CounterName = "% Processor Time";
        cpuCounter.InstanceName = "_Total";
        cpuCounter.NextValue();
        progressBar2.Value = cpuCounter;
  

Спасибо!

Ответ №1:

Вам нужен результат PerformanceCounter.NextValue() — в данный момент вы его игнорируете:

 float value = cpuCounter.NextValue();
progressBar2.Value = (int) value;
  

Конечно, вы захотите проверить диапазон ожидаемых значений — возможно, вам захочется его масштабировать.

Другим вариантом является использование RawValue свойства, которое является long .

Комментарии:

1. Отлично! Спасибо. Вы правы, мне действительно нужно масштабировать выходные данные, но я понятия не имею, как это сделать: (Есть идеи? 🙂

2. @Shadowalker: Вам нужно было бы предоставить нам больше информации — в основном, определите, каким должен быть диапазон выходных данных, каков диапазон входных данных, а затем соответствующим образом умножьте и добавьте.

Ответ №2:

Вы должны назначать не экземпляр счетчика производительности вашему индикатору выполнения, а его значение. Само значение равно Int64.

 progressbar1.Value = (Int32) ramCounter.RawValue;
  

Ваш,
Alois Kraus