透過程式取得 CPU 使用率
<< VB.Net 使用 PerformanceCounter 的寫法 >>
Imports System.Diagnostics ' 匯入System.Diagnostics 命名空間
Public Class Form1
' 宣告並建立"效能計數器元件" 類別
' New PerformanceCounter(CategoryName,CounterName,InstanceName)
Private PfmcCounter As New PerformanceCounter("Processor", "% Processor Time", "_Total")
' CategoryName : 取得或設定這個效能計數器的效能計數器分類的名稱。
' CounterName : 取得或設定與這個PerformanceCounter 執行個體相關的效能計數器的名稱。
' InstanceName : 取得或設定這個效能計數器的執行個體名稱。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 900 ' Timer.Interval 屬性: 取得或設定引發Elapsed 事件的間隔。
Timer1.Enabled = True ' 啟動Timer
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
' PerformanceCounter.NextValue 方法: 取得計數器樣本,並為其傳回計算過的值。
Label1.Text = PfmcCounter.NextValue.ToString & " %"
End Sub
End Class
================================================================
<< VB.Net 使用 WMI 的寫法 >>
Dim objWMI As Object
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 500
Timer1.Enabled = True
objWMI = GetObject("winmgmts:")
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick ' Timer 事件
CPU_Usage()
End Sub
Private Sub CPU_Usage() ' 用 WMI 取得 CPU 使用率
Dim strCls, strCPU As String
strCls = "Win32_Processor" ' WMI 類別
strCPU = "CPU0" ' 當有多顆 CPU 時 , 可調整為 CPU1 , CPU2 .. 依此類推
Debug.WriteLine(objWMI.InstancesOf(strCls)(strCls & ".DeviceID=""" & strCPU & """").LoadPercentage) ' 取得使用率
End Sub
================================================================
VB6 寫法 :
Dim objWMI As Object
Private Sub Form_Load()
Timer1.Interval = 500
Timer1.Enabled = True
Set objWMI = GetObject("winmgmts:")
End Sub
Private Sub Timer1_Timer() ' Timer 事件
CPU_Usage
End Sub
Private Sub CPU_Usage() ' 用 WMI 取得 CPU 使用率
Dim strCls As String, strCPU As String
strCls = "Win32_Processor" ' WMI 類別
strCPU = "CPU0" ' 當有多顆 CPU 時 , 可調整為 CPU1 , CPU2 .. 依此類推
Debug.Print objWMI.InstancesOf(strCls)(strCls & ".DeviceID=""" & strCPU & """").LoadPercentage ' 取得使用率
End Sub
================================================================
另外在WinNT , Win2K , WinXP , Win 2003 … 作業系統中,也可 Call API 來取得 CPU 使用率
Private Declare Function NtQuerySystemInformation Lib "ntdll" _
(ByVal dwInfoType As Long, ByVal lpStructure As Long, _
ByVal dwSize As Long, ByVal dwReserved As Long) As Long
Win98 則可透過登錄檔讀取來取取 CPU 使用率
HKEY_DYN_DATA/PerfStats/StartStat/KERNEL/CPUusage
What People Are Saying About This Post...
我有看到"透過程式取得 CPU 使用率"這篇文章,自己實作後發現有個問題想要請教一下,望請不吝指教,謝謝!
1.我看到該篇文章有一張圖,是類似windows的工作管理員(PH CPU Viwer),有畫出CPU的使用率,但我按找你寫的CODE去實作,發現每執行一次CPU_Usage() 大約需要2秒的時間,如此依來根本很難時做出你的CPU Viewer的情況,請問你是怎麼辦到的,謝謝!!
2.據我所知.net framework裡的(System.Diagnostics.PerformanceCounter)也可以查出cpu load percentage速度似乎比較快,但參數我不會下,提供給你參考一下,謝謝!!