C# デバッグ時の処理時間測定ロジックを簡潔に書く


処理時間測定のロジックを簡潔に。

概要

性能測定などで処理時間を測定する時、どんなロジックを記述してますか。

前々からある方法としては

  • 処理前と処理後のシステム時間を標準出力に出すとか
  • 気を利かせて時間差を算出して出すとか
  • log4を使ってログ出して確認とか

でしょうか。

なんかこの方法だと本ロジックにはさみこまなくてはいけなくて

いまいちスッキリしないなぁと思っていたので

自分なりに解決を考えてみました。

ラムダ式と無名関数(Action)使ってますので新しめの.Net FrameWork限定。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace XXXXX.Common.Utility
{
    class TestingUtility
    {
        public static void watch(string msg, Action action)
        {
#if DEBUG
            Console.WriteLine("{0}:処理開始",msg);
            var watch = Stopwatch.StartNew();
#endif

            action();

#if DEBUG
            Console.WriteLine("{0}:処理終了:かかった時間\t{1}", msg, watch.Elapsed);
#endif
        }
    }
}

 

使う時はこんな感じ

TestingUtility.watch("データ検索処理", () =>
{
  result = getSqlResult(sql);
  // その他計測対象の処理とか
});

TestingUtility.watch("データ出力処理", () =>
{
  csvOutput(result);
  // その他計測対象の処理とか
});

 

どうでしょうか。

ややスッキリしたような。まだまだ改善の余地があるような。

みなさんの妙案あればコメントください。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です