0.サンプルコードの動作環境について
これから紹介するサンプルコードは、一部OSでしか動作しません。 一応、CPU使用率測定のサンプルはWindows 2000またはWindows XP、及びその双方で動作することをを確認し、Windows Meでは動作しないことをしました。 動作確認の結果は赤字で記述しているので注意してください。
| ソースコード | |
|
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 |
Option Strict On Module PerformanceCounter Sub Main() ' PerformanceCounterクラスのインスタンスを作成 Dim pc As New System.Diagnostics.PerformanceCounter() ' プロパティを設定 With pc .CategoryName = "Processor" .CounterName = "% Processor Time" .InstanceName = "_Total" End With ' 1秒おきに測定 Do ' 得られた値を百分率にする Dim value As Single = pc.NextValue() / 100.0F ' 表示 Console.WriteLine("{0:P2}", value) System.Threading.Thread.Sleep(1000) Loop End Sub End Module |
| 出力結果 | |
0.00% 59.63% 23.76% 28.00% 26.00% 31.00% 33.00% 19.61% 23.00% 26.00% 29.00% 26.00% 21.00% 19.00% 41.90% 47.00% 45.00% | |
| ソースコード | |
|
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 |
Option Strict On Module PerformanceCounter Sub Main() ' PerformanceCounterクラスのインスタンスを作成 Dim pc1 As New System.Diagnostics.PerformanceCounter() Dim pc2 As New System.Diagnostics.PerformanceCounter() ' プロパティを設定 With pc1 .CategoryName = "Processor" .CounterName = "% Processor Time" .InstanceName = "_Total" End With With pc2 .CategoryName = "Processor" .CounterName = "% Idle Time" .InstanceName = "_Total" End With ' 1秒おきに測定 Do ' 得られた値を百分率にする Dim value1 As Single = pc1.NextValue() / 100.0F Dim value2 As Single = pc2.NextValue() / 100.0F ' 使用率[%] = 1.0 - 非使用率[%] value2 = 1.0F - value2 ' 表示 Console.WriteLine("{0:P2}, {1:P2}", value1, value2) System.Threading.Thread.Sleep(1000) Loop End Sub End Module |
| 出力結果 | |
0.00%, 100.00% 54.13%, 52.38% 22.77%, 22.77% 19.00%, 19.00% 19.00%, 19.00% 23.00%, 23.00% 28.00%, 28.00% 26.00%, 26.00% 25.00%, 25.00% 19.00%, 19.00% 24.00%, 24.00% 38.00%, 38.00% 48.04%, 48.04% 37.00%, 37.00% 23.00%, 23.00% 28.00%, 28.71% 23.00%, 23.00% 31.68%, 31.00% | |
| ソースコード | |
|
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 |
Option Strict On Module PerformanceCounter Sub Main() ' PerformanceCounterクラスのインスタンスを作成 Dim pc1 As New System.Diagnostics.PerformanceCounter() Dim pc2 As New System.Diagnostics.PerformanceCounter() ' プロパティを設定 With pc1 .CategoryName = "Processor" .CounterName = "% Processor Time" .InstanceName = "0" End With With pc2 .CategoryName = "Processor" .CounterName = "% User Time" .InstanceName = "0" End With ' 1秒おきに測定 Do ' 得られた値を百分率にする Dim value1 As Single = pc1.NextValue() / 100.0F Dim value2 As Single = pc2.NextValue() / 100.0F ' 表示 Console.WriteLine("{0:P2}, {1:P2}", value1, value2) System.Threading.Thread.Sleep(1000) Loop End Sub End Module |
| 出力結果 | |
0.00%, 0.00% 19.42%, 10.58% 21.78%, 12.00% 21.00%, 12.00% 26.00%, 16.00% 31.00%, 24.00% 28.00%, 17.00% 24.00%, 14.00% 30.00%, 16.83% 59.41%, 33.00% 47.57%, 25.96% 44.55%, 19.00% 23.00%, 15.00% 24.00%, 13.00% 24.00%, 13.86% 48.51%, 29.63% 43.12%, 26.47% 28.71%, 14.00% | |
| ソースコード | |
|
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 |
Option Strict On Module PerformanceCounter Sub Main() ' PerformanceCounterクラス Dim handle As System.Diagnostics.PerformanceCounter Dim threads As System.Diagnostics.PerformanceCounter Dim processes As System.Diagnostics.PerformanceCounter ' インスタンスを作成 handle = New System.Diagnostics.PerformanceCounter("Process", "Handle Count", "_Total") threads = New System.Diagnostics.PerformanceCounter("System", "Threads", "") processes = New System.Diagnostics.PerformanceCounter("System", "Processes", "") ' 項目名を表示 Console.WriteLine("ハンドル スレッド プロセス") ' 1秒おきに測定 Do Dim h As Integer = CInt(handle.NextValue()) Dim th As Integer = CInt(threads.NextValue()) Dim p As Integer = CInt(processes.NextValue()) ' 表示 Console.WriteLine(" {0:D5} {1:D3} {2:D3}", h, th, p) System.Threading.Thread.Sleep(1000) Loop End Sub End Module |
| 出力結果 | |
ハンドル スレッド プロセス 09911 498 044 09938 500 045 09980 499 045 10028 500 046 10041 499 046 09924 498 045 09928 498 045 09929 497 044 09947 498 045 09899 497 044 09903 497 044 09907 497 044 09911 497 044 09915 497 044 09919 497 044 | |

![]() CategoryNameの指定 |
![]() CounterNameの指定 |
| ソースコード | |
|
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 |
Option Strict On Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows フォーム デザイナで生成されたコード " #End Region Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim timer As New Timer() timer.Interval = 1000 AddHandler timer.Tick, AddressOf timer_Tick timer.Start() End Sub Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs) Dim value As Double = performanceCounter.NextValue / 100.0F labelPerformance.Text = "CPU使用率(合計): " + value.ToString("P2") End Sub End Class |
