Benchmarking kleiner Codebeispiele in C #, kann diese Implementierung verbessert werden?

Sehr oft finde ich mich dabei, kleine Codestücke zu vergleichen, um zu sehen, welche Implementierung am schnellsten ist.

Sehr oft sehe ich Kommentare, bei denen der Benchmarking-Code weder Jitting noch den Garbage Collector berücksichtigt.

Ich habe die folgende einfache Benchmarking-Funktion, die ich langsam weiterentwickelt habe:

<code>  static void Profile(string description, int iterations, Action func) {
        // warm up 
        func();
        // clean up
        GC.Collect();

        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }
</code>

Verwendungszweck:

<code>Profile("a descriptions", how_many_iterations_to_run, () =>
{
   // ... code being profiled
});
</code>

Hat diese Implementierung irgendwelche Mängel? Ist es gut genug zu zeigen, dass Implementierung X schneller ist als Implementierung Y über Z-Iterationen? Können Sie sich Möglichkeiten vorstellen, dies zu verbessern?

BEARBEITEN Es ist ziemlich klar, dass ein zeitbasierter Ansatz (im Gegensatz zu Iterationen) bevorzugt wird. Hat jemand Implementierungen, bei denen sich die Zeitprüfungen nicht auf die Leistung auswirken?

Antworten auf die Frage(11)

Ihre Antwort auf die Frage