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)