From 076e68a793c03ea5dc12655f9c30739efe4f704b Mon Sep 17 00:00:00 2001 From: Normen Scheiber Date: Tue, 13 Apr 2021 16:24:18 +0200 Subject: [PATCH 1/5] Created benchmark project. --- .../FindIdsBenchmarks.cs | 15 +++++++++++++++ .../Prime.Extensions.Benchmarks.csproj | 12 ++++++++++++ benchmark/Prime.Extensions.Benchmarks/Program.cs | 12 ++++++++++++ src/MongoDB.Extensions.sln | 15 +++++++++++++-- .../MongoCollectionFindExtensions.cs | 5 +++++ 5 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs create mode 100644 benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj create mode 100644 benchmark/Prime.Extensions.Benchmarks/Program.cs diff --git a/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs b/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs new file mode 100644 index 0000000..862d2ae --- /dev/null +++ b/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs @@ -0,0 +1,15 @@ +using System; +using BenchmarkDotNet.Attributes; + +namespace Prime.Extensions.Benchmarks +{ + [MemoryDiagnoser] + public class FindIdsBenchmarks + { + [Benchmark(Baseline = true)] + public void FindIdsViaMongoDbClassicCalls() + { + Console.WriteLine("dd"); + } + } +} diff --git a/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj b/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj new file mode 100644 index 0000000..1d9085a --- /dev/null +++ b/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj @@ -0,0 +1,12 @@ + + + + Exe + netcoreapp3.1 + + + + + + + diff --git a/benchmark/Prime.Extensions.Benchmarks/Program.cs b/benchmark/Prime.Extensions.Benchmarks/Program.cs new file mode 100644 index 0000000..6b89abe --- /dev/null +++ b/benchmark/Prime.Extensions.Benchmarks/Program.cs @@ -0,0 +1,12 @@ +using System; + +namespace Prime.Extensions.Benchmarks +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/src/MongoDB.Extensions.sln b/src/MongoDB.Extensions.sln index 790b492..93069f7 100644 --- a/src/MongoDB.Extensions.sln +++ b/src/MongoDB.Extensions.sln @@ -11,9 +11,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Session", "Session\Session. EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Session.Tests", "Session.Tests\Session.Tests.csproj", "{7D953E6D-B34C-4724-8E4D-A968110CAC74}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prime.Extensions", "Prime.Extensions\Prime.Extensions.csproj", "{284AF759-C10C-4C89-AFA3-F2D190115CC6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prime.Extensions", "Prime.Extensions\Prime.Extensions.csproj", "{284AF759-C10C-4C89-AFA3-F2D190115CC6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prime.Extensions.Tests", "Prime.Extensions.Tests\Prime.Extensions.Tests.csproj", "{74A9A535-5E20-4453-A670-2E37A279226C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Prime.Extensions.Tests", "Prime.Extensions.Tests\Prime.Extensions.Tests.csproj", "{74A9A535-5E20-4453-A670-2E37A279226C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "benchmark", "benchmark", "{73BCA034-E71E-462C-93E7-DF956BBC5E67}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Prime.Extensions.Benchmarks", "..\benchmark\Prime.Extensions.Benchmarks\Prime.Extensions.Benchmarks.csproj", "{960D6087-8C05-4B19-B7D6-78F92F7BAA3F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -45,10 +49,17 @@ Global {74A9A535-5E20-4453-A670-2E37A279226C}.Debug|Any CPU.Build.0 = Debug|Any CPU {74A9A535-5E20-4453-A670-2E37A279226C}.Release|Any CPU.ActiveCfg = Release|Any CPU {74A9A535-5E20-4453-A670-2E37A279226C}.Release|Any CPU.Build.0 = Release|Any CPU + {960D6087-8C05-4B19-B7D6-78F92F7BAA3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {960D6087-8C05-4B19-B7D6-78F92F7BAA3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {960D6087-8C05-4B19-B7D6-78F92F7BAA3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {960D6087-8C05-4B19-B7D6-78F92F7BAA3F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {960D6087-8C05-4B19-B7D6-78F92F7BAA3F} = {73BCA034-E71E-462C-93E7-DF956BBC5E67} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1C05A190-7BC9-4DE5-A49D-D7557B01869D} EndGlobalSection diff --git a/src/Prime.Extensions/MongoCollectionFindExtensions.cs b/src/Prime.Extensions/MongoCollectionFindExtensions.cs index a059734..823a24b 100644 --- a/src/Prime.Extensions/MongoCollectionFindExtensions.cs +++ b/src/Prime.Extensions/MongoCollectionFindExtensions.cs @@ -24,6 +24,11 @@ public static async Task> FindIdsAsync(); + } + Func idSelectorFunc = idResultSelector.Compile(); int batchPartitionsCount = From ff0058f33ff301526fc2066b0f7f93f10eca8a78 Mon Sep 17 00:00:00 2001 From: Normen Scheiber Date: Wed, 14 Apr 2021 13:22:22 +0200 Subject: [PATCH 2/5] Draft1 --- .../FindIdsBenchmarks.cs | 89 ++++++++++++++++++- .../Prime.Extensions.Benchmarks.csproj | 8 ++ .../Prime.Extensions.Benchmarks/Program.cs | 12 ++- 3 files changed, 103 insertions(+), 6 deletions(-) diff --git a/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs b/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs index 862d2ae..86d2cf0 100644 --- a/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs +++ b/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs @@ -1,15 +1,98 @@ using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Threading.Tasks; using BenchmarkDotNet.Attributes; +using MongoDB.Driver; +using MongoDB.Prime.Extensions; +using Squadron; namespace Prime.Extensions.Benchmarks { - [MemoryDiagnoser] + [RPlotExporter, CategoriesColumn, RankColumn, MeanColumn, MedianColumn, MemoryDiagnoser] public class FindIdsBenchmarks { + private readonly MongoReplicaSetResource _mongoRsResource; + private readonly IMongoDatabase _mongoDatabase; + private readonly IMongoCollection _barCollection; + private readonly IReadOnlyList _barsToFind; + + public FindIdsBenchmarks() + { + _mongoRsResource = new MongoReplicaSetResource(); + + _mongoRsResource.InitializeAsync().GetAwaiter().GetResult(); + + _mongoDatabase = _mongoRsResource.CreateDatabase(); + + _barCollection = _mongoDatabase.GetCollection(); + + IReadOnlyList alldBars = CreateRandomBars(10000); + + _barsToFind = alldBars.Skip(4500).Take(5000).Select(bar => bar.Id).ToList(); + + _barCollection.InsertMany(alldBars); + } + [Benchmark(Baseline = true)] - public void FindIdsViaMongoDbClassicCalls() + public async Task FindIdsClassic200() + { + FilterDefinition filter = + Builders.Filter.In(b => b.Id, _barsToFind); + + List bars = await _barCollection + .Find(filter) + .ToListAsync(); + + var result = bars.ToDictionary(t => t.Id); + + if (result.Count != 5000) throw new Exception("WrongResult"); + } + + [Benchmark] + public async Task FindIdsOptimized200() + { + FilterDefinition filter = + Builders.Filter.In(b => b.Id, _barsToFind); + + var result = await _barCollection + .FindIdsAsync(_barsToFind, bar => bar.Id); + + if (result.Count != 5000) + throw new Exception("WrongResult"); + } + + private static async Task InitializeOnce() { - Console.WriteLine("dd"); + + } + + + private static IReadOnlyList CreateRandomBars(int count) + { + return Enumerable + .Range(0, count) + .Select(number => new Bar( + Guid.NewGuid(), + $"BarName-Unique-{number}", + $"BarValue-{Guid.NewGuid()}")) + .ToList(); + } + + private class Bar + { + public Bar(Guid id, string name, string value) + { + Id = id; + Name = name; + Value = value; + } + + public Guid Id { get; } + + public string Name { get; } + public string Value { get; } } } } diff --git a/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj b/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj index 1d9085a..03c978f 100644 --- a/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj +++ b/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj @@ -5,8 +5,16 @@ netcoreapp3.1 + + + + + + + + diff --git a/benchmark/Prime.Extensions.Benchmarks/Program.cs b/benchmark/Prime.Extensions.Benchmarks/Program.cs index 6b89abe..34e995f 100644 --- a/benchmark/Prime.Extensions.Benchmarks/Program.cs +++ b/benchmark/Prime.Extensions.Benchmarks/Program.cs @@ -1,12 +1,18 @@ using System; +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Reports; +using BenchmarkDotNet.Running; namespace Prime.Extensions.Benchmarks { - class Program + public class Program { - static void Main(string[] args) + public static void Main(string[] args) { - Console.WriteLine("Hello World!"); + BenchmarkSwitcher + .FromAssembly(typeof(Program).Assembly) + .Run(args, new DebugInProcessConfig()); + //Summary summary = BenchmarkRunner.Run(); } } } From 4ddc8418612ef983862bee5fb88172a83cb711f8 Mon Sep 17 00:00:00 2001 From: Normen Scheiber Date: Wed, 14 Apr 2021 15:24:50 +0200 Subject: [PATCH 3/5] Benchmarks for FindIds. --- benchmark/Prime.Extensions.Benchmarks.sh | 10 ++ .../FindIdsBenchmarks.cs | 111 +++++++++++++----- .../Prime.Extensions.Benchmarks.csproj | 4 +- .../Prime.Extensions.Benchmarks/Program.cs | 13 +- .../reports/FindIdsBenchmark.Report.md | 19 +++ 5 files changed, 117 insertions(+), 40 deletions(-) create mode 100644 benchmark/Prime.Extensions.Benchmarks.sh create mode 100644 benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md diff --git a/benchmark/Prime.Extensions.Benchmarks.sh b/benchmark/Prime.Extensions.Benchmarks.sh new file mode 100644 index 0000000..d36b4d8 --- /dev/null +++ b/benchmark/Prime.Extensions.Benchmarks.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +rm -rf BenchmarkDotNet.Artifacts +rm -rf Prime.Extensions.Benchmarks/bin +rm -rf Prime.Extensions.Benchmarks/obj +continue +dotnet run --project Prime.Extensions.Benchmarks/ -c release + +continue + diff --git a/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs b/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs index 86d2cf0..44b00e6 100644 --- a/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs +++ b/benchmark/Prime.Extensions.Benchmarks/FindIdsBenchmarks.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Runtime.CompilerServices; using System.Threading.Tasks; using BenchmarkDotNet.Attributes; using MongoDB.Driver; @@ -13,33 +12,80 @@ namespace Prime.Extensions.Benchmarks [RPlotExporter, CategoriesColumn, RankColumn, MeanColumn, MedianColumn, MemoryDiagnoser] public class FindIdsBenchmarks { - private readonly MongoReplicaSetResource _mongoRsResource; - private readonly IMongoDatabase _mongoDatabase; - private readonly IMongoCollection _barCollection; - private readonly IReadOnlyList _barsToFind; + private static MongoReplicaSetResource _mongoRsResource; + private static IMongoCollection _barCollection; + private static IReadOnlyList _200BarsToFind; + private static IReadOnlyList _1000BarsToFind; + private static IReadOnlyList _5000BarsToFind; + private static IReadOnlyList _10000BarsToFind; + + [GlobalSetup] + public void GlobalSetup() + { + InitializeOnce().GetAwaiter().GetResult(); + } - public FindIdsBenchmarks() + [Benchmark()] + public Task FindIdsClassic200() { - _mongoRsResource = new MongoReplicaSetResource(); + return FindClassicAsync(_200BarsToFind); + } - _mongoRsResource.InitializeAsync().GetAwaiter().GetResult(); + [Benchmark] + public Task FindIdsOptimized200() + { + return FindOptimizedAsync(_200BarsToFind); + } - _mongoDatabase = _mongoRsResource.CreateDatabase(); + [Benchmark()] + public Task FindIdsClassic1000() + { + return FindClassicAsync(_1000BarsToFind); + } - _barCollection = _mongoDatabase.GetCollection(); + [Benchmark] + public Task FindIdsOptimized1000() + { + return FindOptimizedAsync(_1000BarsToFind); + } - IReadOnlyList alldBars = CreateRandomBars(10000); + [Benchmark()] + public Task FindIdsClassic5000() + { + return FindClassicAsync(_5000BarsToFind); + } - _barsToFind = alldBars.Skip(4500).Take(5000).Select(bar => bar.Id).ToList(); + [Benchmark] + public Task FindIdsOptimized5000() + { + return FindOptimizedAsync(_5000BarsToFind); + } - _barCollection.InsertMany(alldBars); + [Benchmark()] + public Task FindIdsClassic10000() + { + return FindClassicAsync(_10000BarsToFind); } - [Benchmark(Baseline = true)] - public async Task FindIdsClassic200() + [Benchmark] + public Task FindIdsOptimized10000() + { + return FindOptimizedAsync(_10000BarsToFind); + } + + public async Task FindOptimizedAsync(IReadOnlyList barsToFind) + { + IDictionary result = await _barCollection + .FindIdsAsync(barsToFind, bar => bar.Id); + + if (result.Count != barsToFind.Count) + throw new Exception("WrongResult"); + } + + public async Task FindClassicAsync(IReadOnlyList barsToFind) { FilterDefinition filter = - Builders.Filter.In(b => b.Id, _barsToFind); + Builders.Filter.In(b => b.Id, barsToFind); List bars = await _barCollection .Find(filter) @@ -47,28 +93,33 @@ public async Task FindIdsClassic200() var result = bars.ToDictionary(t => t.Id); - if (result.Count != 5000) throw new Exception("WrongResult"); + if (result.Count != barsToFind.Count) + throw new Exception("WrongResult"); } - [Benchmark] - public async Task FindIdsOptimized200() + private async Task InitializeOnce() { - FilterDefinition filter = - Builders.Filter.In(b => b.Id, _barsToFind); + if (_10000BarsToFind == null) + { + _mongoRsResource = new MongoReplicaSetResource(); - var result = await _barCollection - .FindIdsAsync(_barsToFind, bar => bar.Id); - - if (result.Count != 5000) - throw new Exception("WrongResult"); - } + await _mongoRsResource.InitializeAsync(); - private static async Task InitializeOnce() - { + IMongoDatabase mongoDatabase = _mongoRsResource.CreateDatabase(); - } + _barCollection = mongoDatabase.GetCollection(); + + IReadOnlyList alldBars = CreateRandomBars(5_000_000); + await _barCollection.InsertManyAsync(alldBars); + _200BarsToFind = alldBars.Skip(500_000).Take(200).Select(bar => bar.Id).ToList(); + _1000BarsToFind = alldBars.Skip(500_000).Take(1000).Select(bar => bar.Id).ToList(); + _5000BarsToFind = alldBars.Skip(500_000).Take(5000).Select(bar => bar.Id).ToList(); + _10000BarsToFind = alldBars.Skip(500_000).Take(10000).Select(bar => bar.Id).ToList(); + } + } + private static IReadOnlyList CreateRandomBars(int count) { return Enumerable diff --git a/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj b/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj index 03c978f..895deb8 100644 --- a/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj +++ b/benchmark/Prime.Extensions.Benchmarks/Prime.Extensions.Benchmarks.csproj @@ -1,8 +1,8 @@ - + Exe - netcoreapp3.1 + net5.0 diff --git a/benchmark/Prime.Extensions.Benchmarks/Program.cs b/benchmark/Prime.Extensions.Benchmarks/Program.cs index 34e995f..8d640f2 100644 --- a/benchmark/Prime.Extensions.Benchmarks/Program.cs +++ b/benchmark/Prime.Extensions.Benchmarks/Program.cs @@ -1,7 +1,4 @@ -using System; -using BenchmarkDotNet.Configs; -using BenchmarkDotNet.Reports; -using BenchmarkDotNet.Running; +using BenchmarkDotNet.Running; namespace Prime.Extensions.Benchmarks { @@ -9,10 +6,10 @@ public class Program { public static void Main(string[] args) { - BenchmarkSwitcher - .FromAssembly(typeof(Program).Assembly) - .Run(args, new DebugInProcessConfig()); - //Summary summary = BenchmarkRunner.Run(); + //BenchmarkSwitcher + // .FromAssembly(typeof(Program).Assembly) + // .Run(args, new DebugInProcessConfig()); + BenchmarkRunner.Run(); } } } diff --git a/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md b/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md new file mode 100644 index 0000000..cd790a5 --- /dev/null +++ b/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md @@ -0,0 +1,19 @@ +``` ini + +BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042 +Intel Core i7-9750H CPU 2.60GHz, 1 CPU, 12 logical and 6 physical cores +.NET Core SDK=5.0.202 + [Host] : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT DEBUG [AttachedDebugger] + +``` + +| Method | Mean | Error | StdDev | Median | Rank | Gen 0 | Gen 1 | Gen 2 | Allocated | +|---------------------- |-----------:|----------:|-----------:|-----------:|-----:|----------:|----------:|------:|------------:| +| FindIdsClassic200 | 7.858 ms | 0.2208 ms | 0.6441 ms | 7.804 ms | 1 | 46.8750 | - | - | 342.37 KB | +| FindIdsOptimized200 | 8.235 ms | 0.2573 ms | 0.7507 ms | 8.133 ms | 2 | 46.8750 | - | - | 363.94 KB | +| FindIdsClassic1000 | 22.909 ms | 0.6134 ms | 1.7991 ms | 22.820 ms | 4 | 218.7500 | 62.5000 | - | 1497.76 KB | +| FindIdsOptimized1000 | 19.407 ms | 0.6802 ms | 1.9949 ms | 19.316 ms | 3 | 250.0000 | 93.7500 | - | 1657.89 KB | +| FindIdsClassic5000 | 87.236 ms | 1.9884 ms | 5.8316 ms | 85.830 ms | 6 | 1000.0000 | 250.0000 | - | 7503.24 KB | +| FindIdsOptimized5000 | 61.522 ms | 2.4193 ms | 7.0955 ms | 61.391 ms | 5 | 1222.2222 | 555.5556 | - | 8017.09 KB | +| FindIdsClassic10000 | 179.713 ms | 6.1439 ms | 17.6281 ms | 178.309 ms | 8 | 2333.3333 | 1000.0000 | - | 14924.26 KB | +| FindIdsOptimized10000 | 108.256 ms | 4.0563 ms | 11.3744 ms | 106.254 ms | 7 | 2400.0000 | 800.0000 | - | 15851.93 KB | From 938e5178ab0f4bcc5c54f55a78cf4372e37b2ff0 Mon Sep 17 00:00:00 2001 From: Normen Scheiber Date: Wed, 14 Apr 2021 17:24:40 +0200 Subject: [PATCH 4/5] Added benchmark results. --- .../Prime.Extensions.Benchmarks/Program.cs | 10 ++++----- .../reports/FindIdsBenchmark.Report.md | 22 +++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/benchmark/Prime.Extensions.Benchmarks/Program.cs b/benchmark/Prime.Extensions.Benchmarks/Program.cs index 8d640f2..9af0db2 100644 --- a/benchmark/Prime.Extensions.Benchmarks/Program.cs +++ b/benchmark/Prime.Extensions.Benchmarks/Program.cs @@ -1,4 +1,5 @@ -using BenchmarkDotNet.Running; +using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Running; namespace Prime.Extensions.Benchmarks { @@ -6,10 +7,9 @@ public class Program { public static void Main(string[] args) { - //BenchmarkSwitcher - // .FromAssembly(typeof(Program).Assembly) - // .Run(args, new DebugInProcessConfig()); - BenchmarkRunner.Run(); + BenchmarkSwitcher + .FromAssembly(typeof(Program).Assembly) + .Run(args, new DebugInProcessConfig()); } } } diff --git a/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md b/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md index cd790a5..69d5d64 100644 --- a/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md +++ b/benchmark/Prime.Extensions.Benchmarks/reports/FindIdsBenchmark.Report.md @@ -3,17 +3,17 @@ BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19042 Intel Core i7-9750H CPU 2.60GHz, 1 CPU, 12 logical and 6 physical cores .NET Core SDK=5.0.202 - [Host] : .NET Core 3.1.13 (CoreCLR 4.700.21.11102, CoreFX 4.700.21.11602), X64 RyuJIT DEBUG [AttachedDebugger] + [Host] : .NET Core 5.0.5 (CoreCLR 5.0.521.16609, CoreFX 5.0.521.16609), X64 ``` -| Method | Mean | Error | StdDev | Median | Rank | Gen 0 | Gen 1 | Gen 2 | Allocated | -|---------------------- |-----------:|----------:|-----------:|-----------:|-----:|----------:|----------:|------:|------------:| -| FindIdsClassic200 | 7.858 ms | 0.2208 ms | 0.6441 ms | 7.804 ms | 1 | 46.8750 | - | - | 342.37 KB | -| FindIdsOptimized200 | 8.235 ms | 0.2573 ms | 0.7507 ms | 8.133 ms | 2 | 46.8750 | - | - | 363.94 KB | -| FindIdsClassic1000 | 22.909 ms | 0.6134 ms | 1.7991 ms | 22.820 ms | 4 | 218.7500 | 62.5000 | - | 1497.76 KB | -| FindIdsOptimized1000 | 19.407 ms | 0.6802 ms | 1.9949 ms | 19.316 ms | 3 | 250.0000 | 93.7500 | - | 1657.89 KB | -| FindIdsClassic5000 | 87.236 ms | 1.9884 ms | 5.8316 ms | 85.830 ms | 6 | 1000.0000 | 250.0000 | - | 7503.24 KB | -| FindIdsOptimized5000 | 61.522 ms | 2.4193 ms | 7.0955 ms | 61.391 ms | 5 | 1222.2222 | 555.5556 | - | 8017.09 KB | -| FindIdsClassic10000 | 179.713 ms | 6.1439 ms | 17.6281 ms | 178.309 ms | 8 | 2333.3333 | 1000.0000 | - | 14924.26 KB | -| FindIdsOptimized10000 | 108.256 ms | 4.0563 ms | 11.3744 ms | 106.254 ms | 7 | 2400.0000 | 800.0000 | - | 15851.93 KB | +| Method | Mean | Error | StdDev | Median | Rank | Gen 0 | Gen 1 | Gen 2 | Allocated | +|---------------------- |----------:|---------:|----------:|----------:|-----:|----------:|---------:|------:|------------:| +| FindIdsClassic200 | 10.65 ms | 0.480 ms | 1.394 ms | 10.67 ms | 1 | - | - | - | 322.7 KB | +| FindIdsOptimized200 | 10.55 ms | 0.321 ms | 0.935 ms | 10.43 ms | 1 | 46.8750 | - | - | 338.72 KB | +| FindIdsClassic1000 | 25.45 ms | 0.580 ms | 1.684 ms | 25.29 ms | 3 | 218.7500 | 62.5000 | - | 1372.31 KB | +| FindIdsOptimized1000 | 24.57 ms | 1.318 ms | 3.694 ms | 24.18 ms | 2 | 250.0000 | 93.7500 | - | 1531.93 KB | +| FindIdsClassic5000 | 141.15 ms | 8.385 ms | 24.058 ms | 139.35 ms | 5 | 1000.0000 | 500.0000 | - | 6877.5 KB | +| FindIdsOptimized5000 | 83.00 ms | 2.871 ms | 8.375 ms | 81.85 ms | 4 | 1142.8571 | 571.4286 | - | 7369.99 KB | +| FindIdsClassic10000 | 241.54 ms | 6.473 ms | 18.469 ms | 242.59 ms | 7 | 2000.0000 | 666.6667 | - | 13674.21 KB | +| FindIdsOptimized10000 | 156.01 ms | 6.863 ms | 19.910 ms | 154.24 ms | 6 | 2250.0000 | 750.0000 | - | 14622.44 KB | From 09a644440cc11f06ca54acf47d34dc20c4e760dd Mon Sep 17 00:00:00 2001 From: Normen Scheiber Date: Wed, 14 Apr 2021 17:27:34 +0200 Subject: [PATCH 5/5] Corrected benchmark shell script. --- benchmark/Prime.Extensions.Benchmarks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benchmark/Prime.Extensions.Benchmarks.sh b/benchmark/Prime.Extensions.Benchmarks.sh index d36b4d8..0c3688c 100644 --- a/benchmark/Prime.Extensions.Benchmarks.sh +++ b/benchmark/Prime.Extensions.Benchmarks.sh @@ -3,8 +3,8 @@ rm -rf BenchmarkDotNet.Artifacts rm -rf Prime.Extensions.Benchmarks/bin rm -rf Prime.Extensions.Benchmarks/obj -continue + dotnet run --project Prime.Extensions.Benchmarks/ -c release -continue +