web-dev-qa-db-ja.com

メソッドのパフォーマンスをテストする正しい方法は何ですか?

Xlsxとcsvでデータを処理および検証するためのクラスをいくつか作成しました。

しかし、私はC#で作成した重い作業のためのメソッドがどれほど高速かをテストすることに興味があります。

これは私が現在考えていることです(C#で書かれています):

// use this to test the performance of the method on files with various sizes

class FileProcessorPerformance
{
    private static Stopwatch sw;
    public static Stopwatch PerformanceSpeedStart()
    {
        sw = new Stopwatch();
        sw.Start();
        return sw;
    }

    public static void PerformanceSpeedEnd(Stopwatch stopwatch)
    {
        stopwatch.Stop();
        TimeSpan ts = stopwatch.Elapsed;
        string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
        Console.WriteLine("Run Time: " + elapsedTime);
    }
}

使用例は次のようになります。

Stopwatch sw = PerformanceSpeedStart()
ProcessData();
PerformanceSPeedEnd(sw);

時間の複雑さ(big-O)などのロジックを使用する以外に、ソリューションをベンチマークする場合、どのようにしたらベンチマークを行うのでしょうか。

ありがとう!

3
ygongdev

単一の簡単な方法では、ストップウォッチを使用するとうまくいきます。ただし、より大きく複雑なコードの場合、必要なのはprofilerです。これは、プログラムをデバッガーとしてアタッチし、実行して、コードの長さを監視する外部ツールです。テイクの実行と時間が費やされている場所。

完了すると、ほとんどの時間を費やしている場所を説明する統計レポートが表示されます。通常、これをドリルダウンして、より詳細に調べることができます。プロファイラーは、その使用方法を理解するために少し手間をかけることができますが、一度習得すれば、パフォーマンスチューニングに非常に強力です。

3
Mason Wheeler