我有一个非常标准的基准测试方法,它计算一个方法可以运行的次数,比如60秒:
public static int BenchmarkTasks(Action<int> func, List<int> ids, int seconds)
{
var watch = new Stopwatch();
var executionCount = 0;
watch.Start();
foreach (var id in ids)
{
if (watch.ElapsedMilliseconds / 1000 > seconds)
return executionCount;
func(id);
executionCount++;
}
watch.Stop();
return executionCount;
}
但是,我正在试图弄清楚如何正确调用此方法 - 例如:
var ids = new List<int> {1, 2, 3};
BenchmarkHelper.BenchmarkTasks(delegate { MethodToBenchmark(-1); }, ids, 60);
只需运行方法MethodToBenchmark
并将-1
作为输入值(可以理解),它不会遍历我的ID集合。
任何人都可以让我知道我哪里出错了吗?当然,这只是我误解了如何做到这一点。
感谢。
答案 0 :(得分:4)
您不需要delegate
- 您只需要直接传递该方法即可。否则,您传递的Action
每次都会调用MethodToBenchmark(-1)
。
这就是你应该怎么称呼它:
var ids = new List<int> {1, 2, 3};
BenchmarkHelper.BenchmarkTasks(MethodToBenchmark, ids, 60);
答案 1 :(得分:3)
您可以使用以下匿名方法调用它:
BenchmarkHelper.BenchmarkTasks((i) => MethodToBenchmark(i), ids, 60);
答案 2 :(得分:0)
使用lambda表达式传递参数:
BenchmarkHelper.BenchmarkTasks(id => MethodToBenchmark(id), ids, 60);