Função genérica para testar o desempenho de qualquer delegado

Ao testar o desempenho relativo de diferentes implementações de método, eu me vejo reescrevendo funções semelhantes a isso.

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

Em vez de reescrever essa função para cada método de teste que eu testaria, seria possível escrever uma implementação genérica para testar o desempenho de qualquer delagate? Algo ao longo das linhas de

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

ou

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

    ...
}

Se eu puder fazer isso, faria sentidoCompile aExpression<TDelegate> antes de executar as iterações?

questionAnswers(2)

yourAnswerToTheQuestion