1

我正在尝试用参数对方法进行基准测试。

[Benchmark]
public void ViewPlan(int x)
{
//code here
}

在使用 [Benchmark] 注释执行代码时,我收到一个错误,因为“基准方法 ViewPlan 的签名不正确。方法不应该有任何参数”。所以我也尝试在方法中添加 [Arguments] 注释。参考链接:https ://benchmarkdotnet.org/articles/samples/IntroArguments.html

[Benchmark]
[Arguments]
public void ViewPlan(int x)
{
//code here
}

在这个 [Arguments] 中,我们还需要指定方法的参数值。但是,当调用该功能时,x 的值是动态设置的。有没有办法在 [Arguments] 中动态传递参数值?我们也可以对静态方法进行基准测试吗?如果可以,那么如何?

4

1 回答 1

2

我为你做了一个例子。看看它是否符合您的需求。

public class IntroSetupCleanupIteration
{
        private int rowCount;
        private IEnumrable<object> innerSource;

        public IEnumerable<object> Source => this.innerSource; 

        [IterationSetup]
        public void IterationSetup()
        {
             // retrieve data or setup your grid row count for each iteration
             this.InitSource(42);
        }

        [GlobalSetup]
        public void GlobalSetup()
        {
             // retrieve data or setup your grid row count for every iteration
             this.InitSource(42);
        }

        [Benchmark]
        [ArgumentsSource(nameof(Source))]
        public void ViewPlan(int x)
        {
            // code here
        }

        private void InitSource(int rowCount)
        {
            this.innerSource = Enumerable.Range(0,rowCount).Select(t=> (object)t).ToArray(); // you can also shuffle it
        }
}

不知道你是怎么设置数据的。对于每次迭代或每次迭代一次,所以我包括两个设置。

于 2019-11-21T14:25:23.457 回答