Benchmarkdotnet будет тестировать методы, помеченные атрибутом [Benchmark].
Может быть лучше создать небольшую утилиту (или непосредственно в проекте, который вы создаете) для вызова этой функции.Постарайтесь ограничить все переменные между вызовами, поэтому вместо установки переменной среды в собственных случаях и последующего вызова функции C # прямой вызов декорированных методов [Benchmark] вызывает только то, что вы хотите сравнить.
Ваш тест будет выглядеть примерно так:
public class DrawManagedVsDrawNative
{
private DrawManaged drawManaged = new DrawManaged();
private DrawNative drawNative = new DrawNative();
private byte[] data;
[GlobalSetup]
public void Setup()
{
// Some initialization here
}
[Benchmark]
public byte[] DrawManaged() => drawManaged.Draw();
[Benchmark]
public byte[] DrawNative() => drawNative.Draw();
}
Есть больше декораторов и параметров конфигурации, которые предлагает benchmarkdotnet для вашего теста, обратитесь к docs для этого
Если выдействительно нужно тестировать настройки переменных среды, вы можете создавать собственные задания, используя реализацию ManualConfig.Примерно так:
[Config(typeof(ConfigWithCustomEnvVars))]
public class DrawManagedVsDrawNative
{
private class ConfigWithCustomEnvVars : ManualConfig
{
private const string EnvVar = "Env_Var_Sample";
public ConfigWithCustomEnvVars()
{
Add(Job.Core.WithId("Variable not set"));
Add(Job.Core
.With(new[] { new EnvironmentVariable(EnvVar, "1") })
.WithId("Variable set"));
}
}
private DrawManaged drawManaged = new DrawManaged();
private DrawNative drawNative = new DrawNative();
private byte[] data;
[GlobalSetup]
public void Setup()
{
// Some initialization here
}
[Benchmark]
public byte[] DrawManaged() => drawManaged.Draw();
[Benchmark]
public byte[] DrawNative() => drawNative.Draw();
}