diff --git a/imgs/benchmarks.jpg b/imgs/benchmarks.jpg index 80d1664..fe8e393 100644 Binary files a/imgs/benchmarks.jpg and b/imgs/benchmarks.jpg differ diff --git a/sandbox/AutoQuery.Benchmark/AutoQuery.Benchmark.csproj b/sandbox/AutoQuery.Benchmark/AutoQuery.Benchmark.csproj index dd9c7e0..06ed9b0 100644 --- a/sandbox/AutoQuery.Benchmark/AutoQuery.Benchmark.csproj +++ b/sandbox/AutoQuery.Benchmark/AutoQuery.Benchmark.csproj @@ -10,6 +10,7 @@ + diff --git a/sandbox/AutoQuery.Benchmark/Benchmarks/QueryPerformance.cs b/sandbox/AutoQuery.Benchmark/Benchmarks/QueryPerformance.cs index 68ee312..5e7c2af 100644 --- a/sandbox/AutoQuery.Benchmark/Benchmarks/QueryPerformance.cs +++ b/sandbox/AutoQuery.Benchmark/Benchmarks/QueryPerformance.cs @@ -1,6 +1,9 @@ using AutoQuery.Abstractions; using AutoQuery.Extensions; using BenchmarkDotNet.Attributes; +using Microsoft.Extensions.Options; +using Sieve.Models; +using Sieve.Services; using System.Linq.Dynamic.Core; using System.Reflection; @@ -11,7 +14,9 @@ public class QueryPerformance { private List _autoQueryTestData = null!; private List _dynamicLinqTestData = null!; + private List _sieveTestData = null!; private QueryProcessor _queryProcessor = null!; + private SieveProcessor _sieveProcessor = null!; [GlobalSetup] public void Setup() @@ -19,15 +24,27 @@ public void Setup() _queryProcessor = new QueryProcessor(); _queryProcessor.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); _autoQueryTestData = Enumerable.Range(1, 10000) - .Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 }) - .ToList(); + .Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 }) + .ToList(); _dynamicLinqTestData = Enumerable.Range(1, 10000) - .Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 }) - .ToList(); + .Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 }) + .ToList(); + _sieveTestData = Enumerable.Range(1, 10000) + .Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 }) + .ToList(); + + var sieveOptions = Options.Create(new SieveOptions + { + DefaultPageSize = 10, + MaxPageSize = 100, + CaseSensitive = false + }); + + _sieveProcessor = new SieveProcessor(sieveOptions); } [Benchmark] - public void FilterSortSelectPageWithAutoQuery() + public void AutoQuery_FilterSortSelectPage() { var queryOptions = new TestQueryOptions { @@ -38,11 +55,11 @@ public void FilterSortSelectPageWithAutoQuery() PageSize = 10 }; - _autoQueryTestData.AsQueryable().ApplyQueryPaged(_queryProcessor, queryOptions); + _autoQueryTestData.AsQueryable().ApplyQueryPaged(_queryProcessor, queryOptions).Datas.ToList(); } [Benchmark] - public void FilterSortSelectPageWithDynamicLinq() + public void DynamicLinq_FilterSortSelectPageWith() { _dynamicLinqTestData.AsQueryable() .Where("Name == @0", "Name5000") @@ -53,6 +70,45 @@ public void FilterSortSelectPageWithDynamicLinq() .ToDynamicList(); } + [Benchmark] + public void AutoQuery_FilterSortPageWith() + { + var queryOptions = new TestQueryOptions + { + Name = "Name5000", + Sort = "Age", + Page = 1, + PageSize = 10 + }; + + _autoQueryTestData.AsQueryable().ApplyQueryPaged(_queryProcessor, queryOptions).Datas.ToList(); + } + + [Benchmark] + public void DynamicLinq_FilterSortPageWith() + { + _dynamicLinqTestData.AsQueryable() + .Where("Name == @0", "Name5000") + .OrderBy("Age") + .Skip(0) + .Take(10) + .ToDynamicList(); + } + + [Benchmark] + public void Sieve_FilterSortPageWith() + { + var sieveModel = new SieveModel + { + Filters = "Name==Name5000", + Sorts = "Age", + Page = 1, + PageSize = 10, + }; + + _sieveProcessor.Apply(sieveModel, _sieveTestData.AsQueryable()).ToList(); + } + public class UserQueryConfiguration : IFilterQueryConfiguration { public void Configure(FilterQueryBuilder builder)