|
.NET TIPS
システムの稼働時間を取得するには?[C#、VB]
デジタルアドバンテージ 遠藤 孝信
2009/10/08 |
|
|
システムが稼働し続けている時間(System UpTime:システム稼働時間)をプログラムで取得するには、PerformanceCounterクラス(System.Diagnostics名前空間)を使用する。このクラスは、Windowsシステム(NT 4.0以降)に備わっているパフォーマンス・カウンタ・コンポーネントにアクセスするためのクラスだ。
パフォーマンス・カウンタからは、さまざまな情報が取得できるが、それらは「カテゴリ」により分類されており、各カテゴリ内の特定の「カウンタ」から実際の値を取得できる。PerformanceCounterクラスでは、コンストラクタの引数にカテゴリ名とカウンタ名を指定して、インスタンス化を行えばよい(インスタンス化の後にプロパティでも指定可)。
稼働時間の取得では、カテゴリ名として「System」、カウンタ名として「System Up Time」を、PerformanceCounterクラスのコンストラクタで指定する。
PerformanceCounter upTime =
new PerformanceCounter("System", "System Up Time");
|
Dim upTime As New _
PerformanceCounter("System", "System Up Time")
|
|
稼働時間取得時のPerformanceCounterクラスのコンストラクタ呼び出し(上:C#、下:VB) |
カウンタの値を取得する手順は、使用するカウンタの種類によって若干異なるが、稼働時間の場合はNextValueメソッドを呼び出す。戻り値は稼働時間を表す秒数のfloat値(VBではSingle値)となる。ただし稼働時間の場合は、NextValueメソッドを2度呼び出す必要があり、最初の呼び出しの戻り値は常に「0」となる。
以下にシステムの稼働時間を取得するサンプル・プログラムを示す。
// uptime.cs
using System;
using System.Diagnostics;
class SystemUpTime {
static public float GetSystemUpTime() {
PerformanceCounter upTime =
new PerformanceCounter("System", "System Up Time");
upTime.NextValue(); // 戻り値は0となる
return upTime.NextValue(); // 2度呼び出す必要あり
}
static void Main() {
Console.WriteLine(GetSystemUpTime());
// 出力例:76930.35
Console.WriteLine(
TimeSpan.FromSeconds(GetSystemUpTime()));
// 出力例:21:22:10.3590000
}
}
// コンパイル方法:csc uptime.cs
|
' uptime.vb
Imports System
Imports System.Diagnostics
Class SystemUpTime
Shared Public Function GetSystemUpTime As Single
Dim upTime As New _
PerformanceCounter("System", "System Up Time")
upTime.NextValue() ' 戻り値は0となる
Return upTime.NextValue() ' 2度呼び出す必要あり
End Function
Shared Sub Main()
Console.WriteLine(GetSystemUpTime())
' 出力例:76930.35
Console.WriteLine( _
TimeSpan.FromSeconds(GetSystemUpTime()))
' 出力例:21:22:10.3590000
End Sub
End Class
' コンパイル方法:vbc uptime.vb
|
|
システムの稼働時間を取得するサンプル・プログラム(上:C#、下:VB) |
このプログラムでは、TimeSpanクラス(System名前空間)のFromSecondsメソッドを利用して、取得した稼働時間の秒数をTimeSpan型に変換し、「時:分:秒」での表示も行っている。
なお、Environmentクラス(System名前空間)のTickCountプロパティからも稼働時間が取得可能だが、こちらは型がInt32型であるため、約50日で値が0に戻ってしまう。
カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:PerformanceCounterクラス(System.Diagnostics名前空間)
使用ライブラリ:TimeSpanクラス(System名前空間)
|
|
generated by
|
|
Insider.NET 記事ランキング
本日
月間