Skip to content

Commit

Permalink
Improve benchmarks (#24)
Browse files Browse the repository at this point in the history
* Benchmarks and more unit tests, plus resulting bug fixes

* change benchmarks

* error suppression was not needed anymore

* improve benchmarks
  • Loading branch information
JonathanBout authored Dec 5, 2024
1 parent d1628f7 commit 2d3c961
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 17 deletions.
27 changes: 10 additions & 17 deletions SimpleCDN.Benchmarks/Benchmarks.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Jobs;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
Expand All @@ -9,35 +10,27 @@
namespace SimpleCDN.Benchmarks
{
[MemoryDiagnoser(false)]
//[SimpleJob(RuntimeMoniker.NativeAot90)]
[SimpleJob(RuntimeMoniker.Net90)]
public class Benchmarks
{
public IEnumerable<char[]> Paths =>
public static IEnumerable<char[]> Paths =>
[
"/".ToCharArray(),
"/../".ToCharArray(),
"/data/../".ToCharArray(),
"/test.txt".ToCharArray(),
"/data/../test.txt".ToCharArray(),
"/data/test.json".ToCharArray(),
"/data/../data/test.json".ToCharArray(),
"/data/./../data/test.json".ToCharArray(),
"/data/data/../../data/test.json".ToCharArray(),
"/data/data/../../data/../data/test.json".ToCharArray(),
"/data/data/../../data/../data/../data/test.json".ToCharArray(),
"/data/data/.././data/../../../data/../data/test.json".ToCharArray(),
"/data/data/../../data/../data/../data/../data/./../data/data/../data/../data/../data/./../data/test/data/../../test/data/../../data/../data/test.json".ToCharArray(),
];

[ParamsSource(nameof(Paths))]
public char[] Path { get; set; } = [];

const int NormalizationBenchmarkIterationsPerInvoke = 100;
const int NormalizationBenchmarkIterationsPerInvoke = 50;

[Benchmark(OperationsPerInvoke = NormalizationBenchmarkIterationsPerInvoke)]
public void NormalizationBenchmark()
[ArgumentsSource(nameof(Paths))]
public void Normalize(char[] path)
{
var span = Path.AsSpan();
for (var i = 0; i < NormalizationBenchmarkIterationsPerInvoke; i++)
{
var copy = path.ToArray();
var span = copy.AsSpan();
Helpers.Extensions.Normalize(ref span);
}
}
Expand Down
8 changes: 8 additions & 0 deletions SimpleCDN.Benchmarks/GlobalSuppressions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.

using System.Diagnostics.CodeAnalysis;

[assembly: SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "BenchmarkDotnet requires some members to be non-static, even if they could be static.")]
7 changes: 7 additions & 0 deletions SimpleCDN.Benchmarks/Properties/launchSettings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"profiles": {
"SimpleCDN.Benchmarks": {
"commandName": "Project"
}
}
}
3 changes: 3 additions & 0 deletions launchSettings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
"Docker Compose": {
"commandName": "DockerCompose",
"commandVersion": "1.0",
"composeLaunchAction": "LaunchBrowser",
"composeLaunchServiceName": "simplecdn",
"composeLaunchUrl": "{Scheme}://localhost:{ServicePort}",
"serviceActions": {
"simplecdn": "StartDebugging"
}
Expand Down

0 comments on commit 2d3c961

Please sign in to comment.