Как мы можем передать динамические аргументы в теге [Arguments] для BenchmarkDotNet в C #? - PullRequest
1 голос
/ 21 ноября 2019

Я пытаюсь сравнить метод с параметрами.

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

При выполнении кода с аннотацией [Benchmark] я получил сообщение об ошибке: «Метод Benchmark ViewPlan имеет неверную подпись. Метод не должен иметьлюбые аргументы ". Поэтому я попытался добавить аннотацию [Аргументы] к методу. Ссылка: https://benchmarkdotnet.org/articles/samples/IntroArguments.html

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

В этом [Аргументы] нам необходимо указать значение параметра и для метода. Однако значение x устанавливается динамически при вызове функциональности. Есть ли способ передать значение параметра динамически в [Аргументы]? Также можем ли мы сравнить статические методы? Если да, то как?

1 Ответ

1 голос
/ 21 ноября 2019

Я сделал пример для вас. Посмотрите, соответствует ли это вашим потребностям.

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

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

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

        [GlobalSetup]
        public void GlobalSetup(){
             // retreieve 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
        }

    }

Я не знаю, как вы настраиваете свои данные. Для каждой итерации или один раз для каждой итерации, поэтому я включаю обе установки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...