プログラムの処理時間を測定するサンプルです。
動かしてみたら予想より遅く、高速化の必要があり、どこに時間がかかっているの?
そんな時に使うかもしれません。
測定用のStopwatchクラスを使用します。
Stopwatch
処理時間を測定するクラスです。
サンプルでは3つのメソッドを使用します。
Start() | 測定開始 |
Restart() | 測定再開 |
Stop() | 測定停止 |
サンプルの画面はこんな感じです。
この部品を画面に配置します。
No | 名称 | name | 部品 |
1 | スタート① | btnStart1 | Button |
2 | スタート② | btnStart2 | Button |
サンプルの内容
処理ABCの処理時間を測定します。
スタート①ボタンとスタート②ボタンは結果は同じですが
ストップウォッチ停止処理を用意してコードを整理したサンプルです。
基本的な処理の流れは以下の通りです。
①Start()で処理Aの測定開始
②Stop()で処理Aの測定終了
③処理Aの計測時間(Elapsedプロパティ)をコンソールに出力
④Restart()で処理Bの測定開始(再開)
⑤Stop()で処理Bの測定終了
⑥処理Bの測定時間(Elapsedプロパティ)をコンソールに出力
処理CはBと同様です。
⑦Restart()で処理Cの測定開始(再開)
⑧Stop()で処理Cの測定終了
⑨処理Cの測定時間(Elapsedプロパティ)をコンソールに出力
プログラミング
言語:C#
using System.Diagnostics;
using System.Threading;
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;
using System.Threading;
namespace WindowsFormsApp12
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// スタート①処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStart1_Click(object sender, EventArgs e)
{
// Stopwatch をインスタンス化する
Stopwatch sw = new Stopwatch();
sw.Start();
// ***********************
// 処理A
Thread.Sleep(1000);
// ***********************
sw.Stop();
TimeSpan t1 = sw.Elapsed;
Console.WriteLine($"処理A:{t1}");
sw.Restart();
// ***********************
// 処理B
Thread.Sleep(2000);
// ***********************
sw.Stop();
TimeSpan t2 = sw.Elapsed;
Console.WriteLine($"処理B:{t2}");
sw.Restart();
// ***********************
// 処理C
Thread.Sleep(3000);
// ***********************
sw.Stop();
TimeSpan t3 = sw.Elapsed;
Console.WriteLine($"処理C:{t3}");
}
/// <summary>
/// スタート②処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnStart2_Click(object sender, EventArgs e)
{
// Stopwatch をインスタンス化する
Stopwatch sw = new Stopwatch();
sw.Start();
// ***********************
// 処理A
Thread.Sleep(1000);
// ***********************
stopWatchStop("処理A", sw);
sw.Restart();
// ***********************
// 処理B
Thread.Sleep(2000);
// ***********************
stopWatchStop("処理B", sw);
sw.Restart();
// ***********************
// 処理C
Thread.Sleep(3000);
// ***********************
stopWatchStop("処理C", sw);
}
/// <summary>
/// ストップウォッチ停止処理
/// </summary>
/// <param name="processName"></param>
/// <param name="sw"></param>
public void stopWatchStop(string processName,Stopwatch sw) {
sw.Stop();
TimeSpan t = sw.Elapsed;
Console.WriteLine($"{processName}:{t}");
}
}
}
実行結果
スタート①をクリックする
処理の測定時間がコンソールに出力されます。
スタート②をクリックする
処理の測定時間がコンソールに出力されます。
あたり前ですが、スタート①とスタート②は同じような時間ですね。
以上です。