1

次のコードを使用して、CPU 使用率を取得しようとしていますが、常に 0 を返します。次の関数が 5 秒ごとに呼び出されるように、コードでタイマーも使用しています。

しかし、奇妙なことに、PerformanceCounter コントロールを使用すると、その動作を完全にコーディングできますが、PerformanceCounter クラスを使用すると、動作しません。

Private Function GetAllCpuUsages()
    Dim cpucounter As New PerformanceCounter
    cpucounter.CategoryName = "Processor"
    cpucounter.CounterName = "% Processor Time"
    cpucounter.InstanceLifetime = PerformanceCounterInstanceLifetime.Global
    cpucounter.InstanceName = "_Total"
    cpucounter.MachineName = "."
    cpucounter.ReadOnly = True
    TextBox1.Text = Convert.ToInt32(cpucounter.NextValue).ToString()
    
End Function
4

1 に答える 1

3

はい、あなたはそれを間違っています。メソッドを呼び出すたびに、新しいカウンターを作成します。以前の時間間隔の履歴がまだないため、最初に報告された値は常にゼロになります。代わりに、カウンターを一度だけ作成する必要があります。フォーム コンストラクターで行うのが最適です。

Dim cpucounter As New PerformanceCounter

Public Sub New()
    InitializeComponent()
    cpucounter.CategoryName = "Processor"
    cpucounter.CounterName = "% Processor Time"
    cpucounter.InstanceName = "_Total"
    Timer1.Interval = 1000
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Label1.Text = Convert.ToInt32(cpucounter.NextValue).ToString()
End Sub
于 2013-09-25T13:51:00.047 に答える