Czy zastanawialiście się ostatnio, w jaki sposób zmierzyć wydajność ostatnio napisanej funkcji, która wykonuje zadanie algorytmiczne? Albo czy funkcja po zmianach, na pewno działa wydajniej? A może w myśl zasady, działa nie ruszaj i wycofaj zmiany 🙂
Z pomocą przychodzi framework BenchmarkDotNet do pobrania z NuGet.
W celu dokonania pomiaru, wystarczy prosta klasa, która opakuje wywołania poszczególnych funkcji, które chcemy zmierzyć. Funkcje przeznaczone do wywołania przez framework oznaczane są atrybutem Benchmark.
Samo uruchomienie testów wydajnościowych odbywa się przez wywołanie jednej funkcji generycznej z typem naszej klasy testującej.
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
namespace Kq.Research.BenchmarkTest
{
public class Hardworker
{
public void Do()
{
// ...
}
}
public class MyBenchmark
{
[Benchmark]
public void Test()
{
Hardworker worker = new Hardworker();
worker.Do();
}
}
class Program
{
static void Main(string[] args)
{
//Uruchomienie testów
BenchmarkRunner.Run<MyBenchmark>();
}
}
}
Pomiar wydajności odbywa się na kompilacji Release, a w wyniku otrzymujemy raport w kilku formatach, jak csv, html.
BenchmarkDotNet=v0.11.5, OS=Windows 10.0.18362 Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores .NET Core SDK=2.2.106 [Host] : .NET Core 2.2.4 (CoreCLR 4.6.27521.02, CoreFX 4.6.27521.01), 64bit RyuJIT DefaultJob : .NET Core 2.2.4 (CoreCLR 4.6.27521.02, CoreFX 4.6.27521.01), 64bit RyuJIT
| Method | Mean | Error | StdDev |
|---|---|---|---|
| Test | 0.0235 ns | 0.0140 ns | 0.0131 ns |