我有一个针对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
)
)
答案 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。由于用户通常会跑步 开发环境中的基准,并且不分发基准 对于用户来说,这应该不是问题。