スポンサーリンク
※サイト運営にサーバーは必須です※
~このサイトもエックスサーバーを使用しています~
はじめに
C#において、時間を測定する方法はいくつか考えられます。
例えば、System.DateTime.Nowを使用して、処理が始まった時と処理が終わった時の時刻の差を引き算して求めるなど考えられます。
しかし、この方法は精度がよろしくありません。
他にもいくつかの手法が考えられますが、Stopwatchクラスを使用するのが手軽で、かつ精度がある方法でしょう。
Stopwatchクラスを使えば、その名の通り、ストップウォッチの動きに相当するプログラムを簡単に作成できます。
その他の用途として、自分の作ったアルゴリズムのスピードを調べる時などに使います。
※アルゴリズムのスピードを調べる際は、自分のパソコンの裏で動いているアプリケーションを可能な限り止めないと、結果がばらつきます。結果がぶれる場合は、何度か測定して平均を取らないと、信頼に値する結果は得られません。
Stopwatchクラス
Stopwatchクラスには、時間を測定するにあたって、便利なメソッド・プロパティ・フィールドが用意されています。
よく使われると思われるメソッドは以下の表にまとめました。
メソッド | 意味 |
Reset | タイマー停止して、経過時間を0にリセット |
Restart | 経過時間を0にリセットしてタイマー開始 |
Start | タイマー開始(再開) |
Stop | タイマー停止 |
フィールド | |
Frequency | 1 秒あたりのタイマー刻みの数(精度確認用) |
プロパティ | |
Elapsed | 経過時間の合計 |
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Diagnostics;//追加 namespace StopWatch03 { class Program { static void Main(string[] args) { Stopwatch st=new Stopwatch(); st.Start(); System.Threading.Thread.Sleep(100);//100ミリ秒(0.1秒)経過させる Console.WriteLine("経過時間は"+st.Elapsed);//0.1 System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0.2 st.Stop(); System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0.2 st.Start(); System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0.3 st.Reset(); Console.WriteLine("経過時間は" + st.Elapsed);//0 System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0 st.Start(); System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0.1 st.Restart(); Console.WriteLine("経過時間は" + st.Elapsed);//0 System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0.1 //st.Start();//あってもエラーにはならない System.Threading.Thread.Sleep(100); Console.WriteLine("経過時間は" + st.Elapsed);//0.2 Console.WriteLine("1 秒あたりのタイマー刻みの数は"+Stopwatch.Frequency); } } } |
実行結果
経過時間は00:00:00.1003257
経過時間は00:00:00.2013570
経過時間は00:00:00.2014848
経過時間は00:00:00.3024996
経過時間は00:00:00
経過時間は00:00:00
経過時間は00:00:00.1005686
経過時間は00:00:00.0000007
経過時間は00:00:00.1008119
経過時間は00:00:00.2012111
1 秒あたりのタイマー刻みの数は2597639
あらかじめ、
using System.Diagnostics;
を最初に追加しておくと
Stopwatch st=new System.Diagnostics.Stopwatch();
と長々と書く必要がなく、以下のように省略して書くことができます。
Stopwatch st=new Stopwatch();
関連記事
~プログラミングを勉強してみませんか?~
TechAcademy [テックアカデミー] は無料の体験講座が用意されているので、気軽に体験できます。
※私(サイト主)も無料体験講座を実際に受けてみました(→感想)