2015-05-16 4 views
1

Итак, я пытаюсь получить использование ЦП с использованием PerformanceCounter в Visual Studio 2010, но проблема, с которой я столкнулась, - это когда я добавляю PerformanceCounter и пытаюсь добавить список CategoryName пуст вместе с CounterName и InstanceName.Счетчик производительности Visual Basic не работает

Я также попытался добавить счетчик, используя следующий код, но он по-прежнему не работает:

Imports System.Diagnostics 

Dim myCounter As System.Diagnostics.PerformanceCounter = New System.Diagnostics.PerformanceCounter() 

myCounter.CategoryName = "Processor" 
myCounter.CounterName = "% Processor Time" 
myCounter.InstanceName = "_Total" 

ProgressBar1.Value = myCounter.NextValue.ToString 
cpuTxt.Text = "CPU Usage: " & ProgressBar1.Value.ToString & "%" 

Любая идея, почему это происходит? Я искал какое-то время и до сих пор не могу заставить его работать. Любая помощь приветствуется.

Изображение: http://s11.postimg.org/y0vnpiwcz/screen.jpg

+2

Первый вызов NextValue * всегда * возвращает 0. Следующий вызов, подождите как минимум секунду, сообщает вам, сколько CPU было использовано в течение этой секунды. Не воссоздавайте объект снова, иначе вы снова получите 0. –

ответ

1

Я предполагаю, что вы на самом деле опроса счетчик? Попробуйте что-то вроде этого:

Option Strict On 
Option Explicit On 
Option Infer Off 

Imports System.Diagnostics 

Public Class Form1 

    Private myCounter As System.Diagnostics.PerformanceCounter = New System.Diagnostics.PerformanceCounter() 
    Private WithEvents poll As New Timer 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     myCounter.CategoryName = "Processor" 
     myCounter.CounterName = "% Processor Time" 
     myCounter.InstanceName = "_Total" 
     poll.Interval = 1000 
     poll.Enabled = True 
    End Sub 

    Private Sub poll_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles poll.Tick 
     Dim val As Single = myCounter.NextValue 
     ProgressBar1.Value = CInt(val) 
     cpuTxt.Text = "CPU Usage: " & val.ToString & "%" 
    End Sub 

End Class 

Как Ханс Passant и Plutonix оба указали в комментариях, вы должны создать только прилавок объект раз. Воспроизведение счетчика каждый раз будет только приводить к чтению 0.

+0

OP действительно вызывает 'NextValue', но контекст для отправленного кода отсутствует. Он может создавать новый каждый раз. (+1) – Plutonix

+0

@Plutonix: Мои мысли точно. Эта строка 'ProgressBar1.Value = myCounter.NextValue.ToString' также дала мне головную боль. –

+0

Спасибо, да, я использовал таймер, но я попробовал свой код, и я получил следующую ошибку: 'Не удалось загрузить имя счетчика данных, потому что индекс был прочитан '' Неверный реестр' в строке' Dim val As Single = myCounter .NextValue'. –

0

Есть, вероятно, несколько факторов, в игре здесь, PerformanceCounters должны быть созданы, прежде чем они используются, это действие требует доступа администратора к машине или достаточной эскалации.

В примере, предоставленном MSDN, создание счетчика происходит условно, если счетчик в настоящее время не существует.

https://msdn.microsoft.com/en-us/library/system.diagnostics.performancecounter%28v=vs.110%29.aspx

 Смежные вопросы

  • Нет связанных вопросов^_^