Как ограничить выполнение задания BenchmarkDotNet только на определенных платформах?
Я пишу F# порт программы, которую я написал в собственном коде в прошлом. Я использовал BenchmarkDotNet для измерения его производительности. Я также поместил собственный EXE-файл в выходной каталог приложения.
Я установил родную программу в качестве базового теста и увидел, что она в 5 раз быстрее, чем моя F# программа. Как я и ожидал!
Тем не менее, нативная программа размещена на GitHub и распространяется только в виде двоичного файла Win64. В случае, если кто-то использует другую ОС, попытается запустить ее, она рухнет.
Итак, как указать, что этот тест будет работать только на 64-битной Windows?
1 ответ
В BenchmarkDotNet есть концепция Джобса. Задания определяют, как должен выполняться тест. Таким образом, вы можете выразить свое состояние "только для x64" как задание. Обратите внимание, что существует несколько различных 64-кратных jit-компиляторов, зависящих от времени выполнения (LegacyJIT-x64 и RyuJIT-x64 для полной.NET Framework, RyuJIT-x64 для.NET Core и Mono JIT-компилятор). Вы можете запросить не только конкретную платформу, но и конкретный JIT-компилятор (это может существенно повлиять на производительность), например:
[<RyuJitX64Job>]
member this.MyAwesomeBenchmark () = // ...
В этом случае пользователь будет уведомлен о том, что невозможно скомпилировать эталонный тест для требуемой платформы.
К сожалению, на данный момент нет способа требовать конкретную ОС (есть только один вариант: текущая ОС). Итак, в вашем случае, вероятно, лучше проверить System.Environment.Is64BitOperatingSystem
а также System.Environment.OSVersion
в начале и не запускайте тесты на недопустимых операционных системах.