【问题标题】:BenchmarkDotNet InProcessEmitToolchain Complete SampleBenchmarkDotNet InProcessEmitToolchain 完整示例
【发布时间】:2022-10-15 17:59:11
【问题描述】:
我第一次关注 BenchmarkDotNet 和一般的基准测试。由于我们工作笔记本电脑的防病毒限制,我似乎无法使用普通的 BenchmarkRunner 运行基准测试,因此我尝试使用 InProcessEmitToolchain,如 here 所记录的那样。但是,在这些示例和here 列出的示例中,我看不到实际触发基准测试的应用程序的入口点,而且我在阅读文档时也没有得到任何有用的信息。
谁能指出如何使用 InProcessEmitToolchain 和/或作业的完整示例,该示例解释了如何将作业与应用程序入口点结合使用来运行测试?
【问题讨论】:
标签:
c#
benchmarking
benchmarkdotnet
【解决方案1】:
我在防病毒(Windows Defender)阻止 BenchmarkDotNet 时遇到了同样的问题。我能够弄清楚如何更改工具链设置,尽管我不得不使用InProcessNoEmitToolchain,因为InProcessEmitToolchain 也被阻止了。
下面的示例实际上并未触发防病毒软件,但它显示了如何定义要使用的工具链:
[程序.cs]
using BenchmarkDotNet.Running;
using Benchmarks;
_ = BenchmarkRunner.Run<MaterializeTest>();
[MaterializeTest.cs]
using BenchmarkDotNet.Attributes;
namespace Benchmarks;
[Config(typeof(AntiVirusFriendlyConfig))]
[MemoryDiagnoser]
public class MaterializeTest
{
IEnumerable<int> _sequence;
[Params(10, 100, 1000, 10000)]
public int size;
[GlobalSetup]
public void Setup()
{
_sequence = Enumerable.Range(0, size).Select(i => Random.Shared.Next());
}
[Benchmark]
public IReadOnlyList<int> ToList() => _sequence.ToList();
[Benchmark]
public IReadOnlyList<int> ToArray() => _sequence.ToArray();
}
[AntiVirusFriendlyConfig.cs]
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Toolchains.InProcess.NoEmit;
namespace Benchmarks;
public class AntiVirusFriendlyConfig : ManualConfig
{
public AntiVirusFriendlyConfig()
{
AddJob(Job.MediumRun
.WithToolchain(InProcessNoEmitToolchain.Instance));
}
}