C#における処理時間計測

      2016/08/10

C#で「コードの処理する時間」を計測する

C言語などでは、時間関数などを駆使してコードの処理時間を計測します。

C#でコードの処理時間を計測する場合、Stopwatchクラス(名前空間System.Diagnostics)というクラスが.NET Frameworkに用意されています。

このStopwatchクラスを使ってコードの処理時間計測の性能を評価してみました。

評価方法

同じ処理を100回繰り返し、その処理時間をメモリ上に保持する。
処理対象は、処理時間が一定(のはずである)System.Threading.Sleep()のみとする。
(Sleep()はよく処理の待ちを発生させるときに使用される)
C#の場合、ビルド方法は2種類(Debugビルド、Releaseビルド)があるため、この2種類でも評価を行う。

評価に使用したコード

 

計測結果

Debugビルド Releaseビルド
合計(100回)(msec) 3135.5654 3134.5757
平均(msec) 31.3557 31.3458

DebugビルドとReleaseビルドについては、DebugビルドがReleaseビルドより遅い。

実際の処理時間より平均1.3msecほど、計測時間に遅れが発生する(Debugビルド・Releaseビルドともに)。

計測結果のグラフ

処理時間計測結果グラフ

 

初回のみ10msecほど遅れがある。

4回に1回の割合で2msec前後の遅れが発生する(ばらつきがある)。

 

結果

Stopwatchクラスは、時間計測のための機能として、実装がとても簡単にできる。

コードの処理時間の「目安」(秒単位や100msec単位くらいまで)として、ある程度使える。
(ただし、msecオーダーレベルでの処理時間計測には向かない)

 

 - 未分類