C# 処理時間を測定する(Stopwatch)

C# サンプルコード プログラミング

概要説明

プログラムの処理時間を測定するサンプルです。

動かしてみたら予想より遅く、高速化の必要があり、どこに時間がかかっているの?

そんな時に使うかもしれません。

 

測定用のStopwatchクラスを使用します。

Stopwatch

処理時間を測定するクラスです。

サンプルでは3つのメソッドを使用します。

Start()測定開始
Restart()測定再開
Stop()測定停止

サンプルの画面はこんな感じです。

この部品を画面に配置します。

No名称name部品
1スタート①btnStart1Button
2スタート②btnStart2Button

サンプルの内容

処理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}");
        }
    }
}

実行結果

スタート①をクリックする

処理の測定時間がコンソールに出力されます。

スタート②をクリックする

処理の測定時間がコンソールに出力されます。

 

あたり前ですが、スタート①とスタート②は同じような時間ですね。

以上です。

コメント

タイトルとURLをコピーしました