BenchmarkDotNet - многоцелевой проект Benchmark

У меня есть проект, который нацелен на 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 работают достойно по сравнению с функцией 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 ответов

Хорошо, учитывая то, что поддерживает каждая версия benchmarkdotnet, вы будете ограничены этим.

Текущая версия 0.11.5 поддерживает стандарт.net 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. Как я могу запустить тесты в этом случае?

О Рекомендуется ввести дополнительное консольное приложение (например, MyAwesomeLibrary.Benchmarks), которое будет зависеть от вашего кода и BenchmarkDotNet. Из-за того, что пользователи обычно запускают тесты в среде разработки и не распространяют тесты для пользователей, это не должно быть проблемой.

Другие вопросы по тегам