Сравнительный анализ небольших примеров кода в C #, можно ли улучшить эту реализацию?

Довольно часто в SO я сравниваю небольшие куски кода, чтобы увидеть, какая реализация наиболее быстрая.

Довольно часто я вижу комментарии о том, что в бенчмаркинговом коде не учитывается джиттинг или сборщик мусора.

У меня есть следующая простая функция бенчмаркинга, которую я постепенно развивал:

<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>

Использование:

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

Есть ли в этой реализации недостатки? Достаточно ли хорошо, чтобы показать, что реализация X быстрее, чем реализация Y по Z итераций? Можете ли вы придумать, как бы вы могли это улучшить?

EDIT Совершенно очевидно, что предпочтителен подход, основанный на времени (в отличие от итераций), есть ли у кого-нибудь реализации, где проверки времени не влияют на производительность?

Ответы на вопрос(11)

Ваш ответ на вопрос