Allgemeine Funktion zum Testen der Leistung eines Delegierten

Beim Testen der relativen Leistung verschiedener Methodenimplementierungen stelle ich fest, dass ich ähnliche Funktionen neu schreibe.

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

Wäre es möglich, eine generische Implementierung für Leistungstests zu schreiben, anstatt diese Funktion für jede von mir getestete Methodensingnatur neu zu schreiben? Etwas in der Art von

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

oder

    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");
    }

    ...
}

Wenn ich das kann wäre es sinnvollCompile einExpression<TDelegate> vor dem Ausführen der Iterationen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage