You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用带入口点的InProcessEmitToolchain运行BenchmarkDotNet基准测试?

完整BenchmarkDotNet InProcessEmitToolchain使用示例(含入口点+Job配置)

必要依赖

确保你的控制台项目安装了BenchmarkDotNet NuGet包:

Install-Package BenchmarkDotNet

带入口点的基础示例

以下是完整的控制台应用代码,直接在当前进程运行基准测试(规避杀毒软件对外部进程的限制):

using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Toolchains.InProcess.Emit;

namespace InProcessBenchmarkDemo
{
    // 基准测试类
    public class StringOperationsBenchmarks
    {
        private const string TestString = "Hello BenchmarkDotNet!";

        [Benchmark]
        public string StringConcat() => "Prefix: " + TestString;

        [Benchmark]
        public string StringFormat() => string.Format("Prefix: {0}", TestString);
    }

    class Program
    {
        // 自定义应用入口点
        static void Main(string[] args)
        {
            // 配置使用InProcessEmitToolchain,避免生成外部进程
            var config = ManualConfig.CreateEmpty()
                .AddJob(Job.Default.WithToolchain(InProcessEmitToolchain.Instance))
                .AddLogger(ConsoleLogger.Default)
                .AddColumnProvider(DefaultColumnProviders.Instance);

            // 触发基准测试
            BenchmarkRunner.Run<StringOperationsBenchmarks>(config);
        }
    }
}

结合自定义Job的进阶配置

如果需要自定义基准测试的运行参数(比如迭代次数、GC设置),可以直接在Job中配置后结合InProcess工具链:

static void Main(string[] args)
{
    // 自定义Job:设置迭代次数、强制GC、保留JIT优化
    var customJob = Job.Default
        .WithToolchain(InProcessEmitToolchain.Instance)
        .WithIterationCount(10) // 减少迭代次数加快测试
        .WithGcForce(true) // 每次迭代前强制GC
        .WithJitOptimizationsDisabled(false); // 保持JIT优化(默认开启)

    var config = ManualConfig.CreateEmpty()
        .AddJob(customJob)
        .AddLogger(ConsoleLogger.Default)
        .AddColumnProvider(DefaultColumnProviders.Instance);

    BenchmarkRunner.Run<StringOperationsBenchmarks>(config);
}

关键说明

  • InProcessEmitToolchain.Instance:该工具链直接在当前进程编译并运行基准代码,不会生成额外的测试EXE,完美规避杀毒软件对外部进程的拦截。
  • 入口点必须是控制台应用的Main方法,直接启动进程运行测试,无需依赖BenchmarkDotNet自动生成入口。
  • 若需多组测试配置,可使用AddJobs方法添加多个已配置的Job实例。

内容的提问来源于stack exchange,提问作者Thomas Parikka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:54:26