経過した時間を測定する - System.Diagnostics.Stopwatch の利用 - C#

処理にどの程度の時間を要したかなど、プログラム内で経過時間を測定したい場合があります。この記事では、C#で経過時間を測定するコードを紹介します。

概要

設定したタイミングからの経過時間を測定する場合は、System.Diagnostics.Stopwatch クラスを利用します。

サンプルプログラム

UI

下図のUIを作成します。ButtonとTextBoxを1つづつ配置します。

コード

書きこのコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;

namespace StopWatchDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Stopwatch sw = new Stopwatch();
      sw.Start();
      
      int k = 0;

      for (int i = 0; i < 100; i++) {
        for (int j=0; j<100; j++){
          k += j + i;
          System.Diagnostics.Debug.WriteLine(k);    
        }
        textBox1.Text += string.Format("ループ{0:d}: {1:d}\r\n", i, sw.ElapsedMilliseconds);
      }

      textBox1.Text += string.Format("処理終了: {0:d}\r\n",sw.ElapsedMilliseconds);
    }
  }
}

解説

  Stopwatch sw = new Stopwatch();
  sw.Start();
上記のコードにてStopwatchクラスのインスタンスを作成し、Start()メソッドを呼び出し時間計測を開始します。

for (int i = 0; i < 100; i++) {
  for (int j=0; j<100; j++){
    k += j + i;
    System.Diagnostics.Debug.WriteLine(k);    
  }
  textBox1.Text += string.Format("ループ{0:d}: {1:d}\r\n", i, sw.ElapsedMilliseconds);
}
上記のコードにより、ループ処理で計算をします。外側のループが1回終了するごとにそれまでに要した時間をミリ秒単位でテキストボックスに表示します。StopwatchクラスのElapsedMillisecondsによりStartメソッドが呼び出されてから経過した時間をミリ秒単位で取得できます。

textBox1.Text += string.Format("処理終了: {0:d}\r\n",sw.ElapsedMilliseconds);
ループ終了後に処理に要した時間をテキストボックスに表示します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[Button1]をクリックします。処理が始まります。処理が終了すると下図の出力がテキストボックスに表示されます。


各行はループが終了した時点での処理時間です。最後の行に処理終了までの時間がミリ秒単位で表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2014-05-09
iPentec all rights reserverd.