Tho*_*kka 14 c# benchmarking benchmarkdotnet
我第一次关注 BenchmarkDotNet 和一般基准测试。由于我们工作笔记本电脑上的防病毒限制,我似乎无法使用普通的 BenchmarkRunner 运行基准测试,因此我尝试使用 InProcessEmitToolchain,如此处所述。然而,在这些示例和此处列出的示例中,我看不到真正会触发基准测试的应用程序的入口点,并且我在阅读文档时没有得到任何有用的信息。
谁能向我指出如何使用 InProcessEmitToolchain 和/或作业的完整示例,以解释如何将作业与应用程序入口点结合使用来运行测试?
And*_*erg 20
我遇到了与防病毒软件(Windows Defender)阻止 BenchmarkDotNet 相同的问题。我能够弄清楚如何更改工具链设置,尽管我不得不使用,InProcessNoEmitToolchain因为InProcessEmitToolchain也被阻止了。
下面的示例实际上并未触发防病毒软件,但它展示了如何定义要使用的工具链:
[程序.cs]
using BenchmarkDotNet.Running;
using Benchmarks;
_ = BenchmarkRunner.Run<MaterializeTest>();
Run Code Online (Sandbox Code Playgroud)
[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();
}
Run Code Online (Sandbox Code Playgroud)
[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));
}
}
Run Code Online (Sandbox Code Playgroud)
[基准.csproj]
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.2" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
您可以使用您喜欢的工具链调整配置:
var config = DefaultConfig.Instance
.AddJob(Job
.MediumRun
.WithLaunchCount(1)
.WithToolchain(InProcessEmitToolchain.Instance));
Run Code Online (Sandbox Code Playgroud)
或者也可以
var config = DefaultConfig.Instance
.AddJob(Job
.MediumRun
.WithLaunchCount(1)
.WithToolchain(InProcessNoEmitToolchain.Instance));
Run Code Online (Sandbox Code Playgroud)
并将其传递给 Run 方法(基于Andreas Warberg的程序构建)
_ = BenchmarkRunner.Run<MaterializeTest>(config);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4712 次 |
| 最近记录: |