Evaluando ejemplos de código pequeño en C #, ¿se puede mejorar esta implementación?

Muy a menudo, SO me encuentro comparando pequeños trozos de código para ver qué implementación es más rápida.

Muy a menudo veo comentarios que el código de evaluación comparativa no tiene en cuenta jitting o el recolector de basura.

Tengo la siguiente función de evaluación comparativa simple que he evolucionado lentamente:

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

Uso:

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

¿Esta implementación tiene fallas? ¿Es lo suficientemente bueno como para demostrar que la implementación X es más rápida que la implementación Y sobre las iteraciones Z? ¿Se te ocurre alguna forma de mejorar esto?

EDITAR Es bastante claro que se prefiere un enfoque basado en el tiempo (a diferencia de las iteraciones). ¿Alguien tiene implementaciones en las que los controles de tiempo no afecten el rendimiento?

Respuestas a la pregunta(11)

Su respuesta a la pregunta