.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に戻ってしまう。End of Article

カテゴリ:クラス・ライブラリ 処理対象:Windows環境
使用ライブラリ:PerformanceCounterクラス(System.Diagnostics名前空間)
使用ライブラリ:TimeSpanクラス(System名前空間)

この記事と関連性の高い別の.NET TIPS
秒数を「hh:mm:ss」形式の文字列にするには?
日時や時間間隔の加減算を行うには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間