Общая функция для проверки производительности любого делегата
При тестировании относительной производительности различных реализаций метода я переписываю функции, подобные этой.
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
перед выполнением итераций?