【问题标题】:BenchmarkDotNet - Benchmark Multi-Targeted ProjectBenchmarkDotNet - 基准多目标项目
【发布时间】:2018-07-20 19:25:08
【问题描述】:

我有一个针对 net35、net40、net45 和 netstandard2.0 的项目。 (https://weblog.west-wind.com/posts/2017/Jun/22/MultiTargeting-and-Porting-a-NET-Library-to-NET-Core-20)。我想对我所针对的每个版本的 dotnet 进行基准测试,以确保我为旧版本的 .Net 中缺少的功能创建的 polyfill 与 .Net 功能相比表现得不错。例如 net35 在 System.Collections.Concurrent 命名空间中没有任何类型。是否可以使用 BenchmarkDotNet 进行此类基准测试,如果可以,如何进行?

    new CachingActivatorFactory(
#if NET35
        new ReaderWriterCache<ConstructorInfo, Func<object[], object>>(),
#else
        new ConcurrentCache<ConstructorInfo, Func<object[],object>>(), 
#endif
        new LambdaExpressionActivatorFactory(
#if NET45 || NETSTANDARD
            new IlEmitCompiler()
#else
            new SystemExpressionCompiler()
#endif  
        )
    )

【问题讨论】:

  • 还注意到您列出的 net35、net40 和 net45 都不存在问题支持的运行时:.NET Framework (4.6.1+)、.NET Core (2.0+)、Mono、CoreRT

标签: benchmarkdotnet


【解决方案1】:

好吧,鉴于 benchmarkdotnet 的每个版本都支持,您将受到限制。

当前版本0.11.5支持.net standard 2.0,将支持.net core> 2.0.net framework > 4.6.1 所以这些将是您可以测试的目标。

因此,例如,我可以将基准项目定位到 net461 和 netcoreapp2.2。您还在列表中包含了 .net 标准,但您不能将其作为目标,因为它不是运行时。在任何情况下,您都必须将项目目标设置为:

<TargetFrameworks>netcoreapp2.2;net461;</TargetFrameworks>

然后你装饰你的测试类:

[CoreJob, ClrJob]

有一个解决方法是限制在 benchmarkdotnet 库支持的 FAQ 中显示的内容。

Q 我的源代码针对的是旧版本的 .NET Framework 或 .NET Core,但 BenchmarkDotNet 需要 net461 和 netcoreapp2.0。我怎样才能 在这种情况下运行基准测试?

A 最好引入一个额外的控制台应用程序(例如 MyAwesomeLibrary.Benchmarks),它依赖于 您的代码和 BenchmarkDotNet。由于用户通常运行 开发环境中的基准测试,不分发基准测试 对于用户来说,这应该不是问题。

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多