Общая функция для проверки производительности любого делегата

При тестировании относительной производительности различных реализаций метода я переписываю функции, подобные этой.

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

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

Вместо того, чтобы переписывать эту функцию для каждой тестируемой особенности метода, можно ли будет написать универсальную реализацию для тестирования производительности в любом случае? Нечто подобное

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

или же

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

    ...
}

Если бы я мог сделать это, имело бы смыслCompile Expression перед выполнением итераций?

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

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