Función genérica para probar el desempeño de cualquier delegado.

Al probar el rendimiento relativo de diferentes implementaciones de métodos, me encuentro reescribiendo funciones similares a esta.

private static long Measure(
    int iterations,
    Func<string, string> func,
    string someParameter)
{
    var stopwatch = new Stopwatch();
    stopwatch.Start();
    for (var i = 0; i < iterations; i++)
    {
        func(someParameter);
    }

    stopwatch.Stop();
    return stopwatch.ElapsedTicks;
}

En lugar de volver a escribir esta función para cada método que deseen probar, ¿sería posible escribir una implementación genérica para probar el rendimiento de cualquier deslagate? Algo a lo largo de las líneas de

    private static long Measure(
    int iterations,
    Delegate func,
    params object[] parameters)
{
    ...
}

o

    private static long Measure<TDelegate>(
    int iterations,
    TDelegate func,
    params object[] parameters)
{
    if (!typeof(TDelegate).IsSubclassOf(typeof(Delegate)))
    {
        throw new ArgumentException("Not a delegate", "func");
    }

    ...
}

Si puedo hacer esto tendría sentidoCompile unExpression<TDelegate> antes de realizar las iteraciones?

Respuestas a la pregunta(2)

Su respuesta a la pregunta