BenchmarkDotNet-基准多目标项目

时间:2018-07-20 19:25:08

标签: benchmarkdotnet

我有一个针对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与dot 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  
        )
    )

1 个答案:

答案 0 :(得分:1)

鉴于每种基准点网所支持的功能,您都会受到限制。

当前版本 0.11.5 支持 .net标准2.0 ,该版本将支持 .net core> 2.0 .net框架> 4.6.1 ,以便您可以测试这些目标。

因此,举例来说,我可以将基准项目定位为net461和netcoreapp2.2。您还在列表中包括了.net标准,尽管它不是运行时,但您不能将它作为目标。无论如何,您都必须将项目目标设置为:

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

然后,您用以下内容装饰测试类:

[CoreJob, ClrJob]

但是,有一种变通方法是受限于FAQ中基准点网库所支持的内容。

  

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

     

A 的最佳做法是引入一个附加的控制台应用程序(例如MyAwesomeLibrary.Benchmarks),具体取决于   您的代码和BenchmarkDotNet。由于用户通常会跑步   开发环境中的基准,并且不分发基准   对于用户来说,这应该不是问题。