[ VB.NET / C# ] 処理(経過)時間を測定する ( StopWatch )

Pocket

VB.NET および C# である時点からある時点までの処理(経過)時間を測定するサンプルコードを掲載しています。デバッグや処理時間がかかり過ぎているような箇所を探すのによく使用すると思います。

スポンサーリンク

開始と終了時間の差分から処理時間を抽出

まずは、実直に2ポイントで時間を取得し、その差分を求める方法です。

VB.NET

Class TimeTest
   Public Shared Sub Main()

      Dim startDt As DateTime = DateTime.Now

      '
      ' 何かの処理
      '
      System.Threading.Thread.Sleep(1000)

      Dim endDt As DateTime = DateTime.Now

      Dim ts As TimeSpan = endDt - startDt ' 時間の差分を取得

      Console.WriteLine(ts.TotalMinutes) ' 経過時間(分)
      Console.WriteLine(ts.TotalSeconds) ' 経過時間(秒)
      Console.WriteLine(ts.TotalMilliseconds) ' 経過時間(ミリ秒)

      Console.ReadKey()

   End Sub
End Class

C#

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           DateTime startDt = DateTime.Now;

           //
           // 何かの処理
           //
           System.Threading.Thread.Sleep(1000);

           DateTime endDt = DateTime.Now;

           TimeSpan ts = endDt - startDt; // 時間の差分を取得

           Console.WriteLine(ts.TotalMinutes); // 経過時間(分)
           Console.WriteLine(ts.TotalSeconds); // 経過時間(秒)
           Console.WriteLine(ts.TotalMilliseconds); // 経過時間(ミリ秒)

           Console.ReadKey();
       }
    }
}

StopWatch クラスを使用する方法

上記では、DateTime クラスの差分を取得して経過時間を求めましたが、StopWatch クラスを使用しても 経過時間を測定することもできます。名前からもわかるようにストップウォッチのように一時停止や再開ができますので、不連続な処理時間の合計時間を求める場合などに適しています。

VB.NET

Class TimeTest
   Public Shared Sub Main()

       ' 計測開始
       Dim sw As New System.Diagnostics.Stopwatch()
       sw.Start()

       '
       ' 何か処理する
       '
       System.Threading.Thread.Sleep(1000)

       ' 計測停止
       sw.Stop()

       '経過時間を出力する
       Console.WriteLine(sw.Elapsed) ' TimeSpan クラスオブジェクトで取得・出力
       Console.WriteLine(sw.ElapsedMilliseconds) ' Long 型で取得・出力

       ' 経過時間をクリアする場合は Reset メソッドを呼び出す
       'sw.Reset()

       ' 計測再開
       sw.Start()

       '
       ' 何か処理する
       '
       System.Threading.Thread.Sleep(1000)

       ' 計測停止
       sw.Stop()

       ' 経過時間を出力する
       ' Reset メソッドを呼び出していない場合は、経過時間の累積が表示される

       Console.WriteLine(sw.Elapsed) ' TimeSpan クラスオブジェクトで取得・出力
       Console.WriteLine(sw.ElapsedMilliseconds) ' Long 型で取得・出力

       Console.ReadKey()
   End Sub

End Class

C#

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
           // 計測開始
           System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
           sw.Start();

           //
           // 何か処理する
           //
           System.Threading.Thread.Sleep(1000);

           // 計測停止
           sw.Stop();

           // 経過時間を出力する
           Console.WriteLine(sw.Elapsed); // TimeSpan クラスオブジェクトで取得・出力
           Console.WriteLine(sw.ElapsedMilliseconds); // Long 型で取得・出力

           // 経過時間をクリアする場合は Reset メソッドを呼び出す
           //sw.Reset();

           // 再度計測
           sw.Start();

           //
           // 何か処理する
           //
           System.Threading.Thread.Sleep(1000);

           // 計測停止
           sw.Stop();

           // 経過時間を出力する
           // Reset メソッドを呼び出していない場合は、経過時間の累積が表示される

           Console.WriteLine(sw.Elapsed); // TimeSpan クラスオブジェクトで取得・出力
           Console.WriteLine(sw.ElapsedMilliseconds); // Long 型で取得・出力

           Console.ReadKey();
        }
    }
}
参考
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *