【发布时间】:2012-11-20 18:14:59
【问题描述】:
在测试不同方法实现的相对性能时,我发现自己重写了类似的函数。
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;
}
与其为我测试的每个方法签名重写此函数,是否可以编写一个通用实现来测试任何 delagate 的性能?类似于
private static long Measure(
int iterations,
Delegate func,
params object[] parameters)
{
...
}
或
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");
}
...
}
如果我能做到这一点,在执行迭代之前Compile 和 Expression<TDelegate> 是否有意义?
【问题讨论】:
标签: c# generics reflection lambda