BenchmarkDotNet lässt sich am einfachsten über den NuGet Packet Manager installieren:
- Install-Package BenchmarkDotNet
Alternativ ist das Projekt auf GitHub verfügbar (https://github.com/dotnet/BenchmarkDotNet).
Dort ist auch die Projektdokumentation verlinkt, die über Guides, Features und weitere Beispiele verfügt (https://benchmarkdotnet.org/articles/overview.html).
Als einfaches Beispiel habe ich die Klasse „BenchmarkExample“ erstellt, um die Performanceunterschiede zweier Methoden, die einen String verketten, zu demonstrieren.
Die Beispielklasse enthält die Methoden ConcatStringWithStringBuilder() und ConcatStringWithList(), die mit [Benchmark] versehen sind. Durch das Attribut werden diese in den Benchmark mit aufgenommen.
BenchmarkDotNet stellt uns mehrere Attribute zur Verfügung, in diesem Beispiel wird nur [RankColumn] und [MemoryDiagnoser] verwendet.
Als Einstiegspunkt für den BenchmarkRunner, dient die Program.cs:
Um den Benchmark zu starten, ist es wichtig, den Release Build des Projekts auszuführen. Falls man es dennoch im Debug startet, erhält man diese Fehlermeldung:
In Visual Studio kann der Release Build mit folgendem Command ausgeführt werden:
- dotnet run --project Benchmark.csproj -c Release
Ein erfolgreicher Durchlauf liefert uns folgendes Ergebnis:
Die Spalten der Tabelle enthalten die von unseren Attributen definierten Daten.
Die Rank Spalte wurde vom [RankColumn] Attribut hinzugefügt und durch das [MemoryDiagnoser] Attribut können wir unseren Speicher, mit den Spalten Gen0, Gen1, Gen2 und Allocated, überwachen.
Durch diesen einfachen Test können wir feststellen, dass der StringBuilder zwar mehr Speicherplatz benötigt, er aber minimal schneller im Zusammensetzen von Strings ist.
Dieser quiTeq-Tipp kommt aus Stuttgart von Daniel Hellwig, QUIBIQ Stuttgart.