C# 以集合作为输入多次调用操作

C# 以集合作为输入多次调用操作,c#,delegates,action,C#,Delegates,Action,我有一个非常标准的基准测试方法,它计算一个方法可以在60秒内运行的次数: public static int BenchmarkTasks(Action<int> func, List<int> ids, int seconds) { var watch = new Stopwatch(); var executionCount = 0; watch.Start(); foreach (v

我有一个非常标准的基准测试方法,它计算一个方法可以在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);
简单地以-1作为输入值运行MethodToBenchmark方法是可以理解的,它不会遍历我的ID集合

谁能告诉我哪里出了问题?当然,只是我误解了怎么做


谢谢。

您可以使用以下匿名方法调用它:

BenchmarkHelper.BenchmarkTasks((i) => MethodToBenchmark(i), ids, 60);

您可以使用以下匿名方法调用它:

BenchmarkHelper.BenchmarkTasks((i) => MethodToBenchmark(i), ids, 60);
您不需要委托-您只需要直接传递方法。否则,您将传递一个操作,该操作每次调用MethodToBenchmark-1

你应该这样称呼它:

var ids = new List<int> {1, 2, 3};
BenchmarkHelper.BenchmarkTasks(MethodToBenchmark, ids, 60);
您不需要委托-您只需要直接传递方法。否则,您将传递一个操作,该操作每次调用MethodToBenchmark-1

你应该这样称呼它:

var ids = new List<int> {1, 2, 3};
BenchmarkHelper.BenchmarkTasks(MethodToBenchmark, ids, 60);

使用lambda表达式传递参数:

BenchmarkHelper.BenchmarkTasks(id => MethodToBenchmark(id), ids, 60);

使用lambda表达式传递参数:

BenchmarkHelper.BenchmarkTasks(id => MethodToBenchmark(id), ids, 60);

BenchmarkHelper.BenchmarkTasksMethodToBenchmark,ids,60;如果MethodToBenchmark返回void并使用一个int参数,这就足够了。命名Action func类型的东西不是有点太过分了吗-我刚刚注意到这个方法并没有达到你所说的效果。它不会计算一个方法在60秒内可以运行的次数,因为它将在ids耗尽后停止。因此,在您的示例中,它可以返回的最大值是3。这是故意的吗?@petelids“真正”的收藏通常不会在60秒内耗尽;但是,我认为如果集合用完,重新开始可能更安全。BenchmarkHelper.BenchmarkTasksMethodToBenchmark,ids,60;如果MethodToBenchmark返回void并使用一个int参数,这就足够了。命名Action func类型的东西不是有点太过分了吗-我刚刚注意到这个方法并没有达到你所说的效果。它不会计算一个方法在60秒内可以运行的次数,因为它将在ids耗尽后停止。因此,在您的示例中,它可以返回的最大值是3。这是故意的吗?@petelids“真正”的收藏通常不会在60秒内耗尽;不过,我认为如果收藏用完了,重新开始可能会更安全。