Skip to content

Commit 4e8f683

Browse files
authored
Merge pull request #5 from willysoft/add-sieve-and-update-benchmarks
chore: Add Sieve integration and update QueryPerformance benchmarks
2 parents 67020d0 + 68283de commit 4e8f683

File tree

3 files changed

+64
-7
lines changed

3 files changed

+64
-7
lines changed

imgs/benchmarks.jpg

70.5 KB
Loading

sandbox/AutoQuery.Benchmark/AutoQuery.Benchmark.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
<ItemGroup>
1212
<PackageReference Include="BenchmarkDotNet" Version="0.14.0" />
13+
<PackageReference Include="Sieve" Version="2.5.5" />
1314
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.6.0.2" />
1415
</ItemGroup>
1516

sandbox/AutoQuery.Benchmark/Benchmarks/QueryPerformance.cs

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
using AutoQuery.Abstractions;
22
using AutoQuery.Extensions;
33
using BenchmarkDotNet.Attributes;
4+
using Microsoft.Extensions.Options;
5+
using Sieve.Models;
6+
using Sieve.Services;
47
using System.Linq.Dynamic.Core;
58
using System.Reflection;
69

@@ -11,23 +14,37 @@ public class QueryPerformance
1114
{
1215
private List<TestData> _autoQueryTestData = null!;
1316
private List<TestData> _dynamicLinqTestData = null!;
17+
private List<TestData> _sieveTestData = null!;
1418
private QueryProcessor _queryProcessor = null!;
19+
private SieveProcessor _sieveProcessor = null!;
1520

1621
[GlobalSetup]
1722
public void Setup()
1823
{
1924
_queryProcessor = new QueryProcessor();
2025
_queryProcessor.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
2126
_autoQueryTestData = Enumerable.Range(1, 10000)
22-
.Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 })
23-
.ToList();
27+
.Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 })
28+
.ToList();
2429
_dynamicLinqTestData = Enumerable.Range(1, 10000)
25-
.Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 })
26-
.ToList();
30+
.Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 })
31+
.ToList();
32+
_sieveTestData = Enumerable.Range(1, 10000)
33+
.Select(i => new TestData { Id = i, Name = $"Name{i}", Age = i % 100 })
34+
.ToList();
35+
36+
var sieveOptions = Options.Create(new SieveOptions
37+
{
38+
DefaultPageSize = 10,
39+
MaxPageSize = 100,
40+
CaseSensitive = false
41+
});
42+
43+
_sieveProcessor = new SieveProcessor(sieveOptions);
2744
}
2845

2946
[Benchmark]
30-
public void FilterSortSelectPageWithAutoQuery()
47+
public void AutoQuery_FilterSortSelectPage()
3148
{
3249
var queryOptions = new TestQueryOptions
3350
{
@@ -38,11 +55,11 @@ public void FilterSortSelectPageWithAutoQuery()
3855
PageSize = 10
3956
};
4057

41-
_autoQueryTestData.AsQueryable().ApplyQueryPaged(_queryProcessor, queryOptions);
58+
_autoQueryTestData.AsQueryable().ApplyQueryPaged(_queryProcessor, queryOptions).Datas.ToList();
4259
}
4360

4461
[Benchmark]
45-
public void FilterSortSelectPageWithDynamicLinq()
62+
public void DynamicLinq_FilterSortSelectPageWith()
4663
{
4764
_dynamicLinqTestData.AsQueryable()
4865
.Where("Name == @0", "Name5000")
@@ -53,6 +70,45 @@ public void FilterSortSelectPageWithDynamicLinq()
5370
.ToDynamicList();
5471
}
5572

73+
[Benchmark]
74+
public void AutoQuery_FilterSortPageWith()
75+
{
76+
var queryOptions = new TestQueryOptions
77+
{
78+
Name = "Name5000",
79+
Sort = "Age",
80+
Page = 1,
81+
PageSize = 10
82+
};
83+
84+
_autoQueryTestData.AsQueryable().ApplyQueryPaged(_queryProcessor, queryOptions).Datas.ToList();
85+
}
86+
87+
[Benchmark]
88+
public void DynamicLinq_FilterSortPageWith()
89+
{
90+
_dynamicLinqTestData.AsQueryable()
91+
.Where("Name == @0", "Name5000")
92+
.OrderBy("Age")
93+
.Skip(0)
94+
.Take(10)
95+
.ToDynamicList();
96+
}
97+
98+
[Benchmark]
99+
public void Sieve_FilterSortPageWith()
100+
{
101+
var sieveModel = new SieveModel
102+
{
103+
Filters = "Name==Name5000",
104+
Sorts = "Age",
105+
Page = 1,
106+
PageSize = 10,
107+
};
108+
109+
_sieveProcessor.Apply(sieveModel, _sieveTestData.AsQueryable()).ToList();
110+
}
111+
56112
public class UserQueryConfiguration : IFilterQueryConfiguration<TestQueryOptions, TestData>
57113
{
58114
public void Configure(FilterQueryBuilder<TestQueryOptions, TestData> builder)

0 commit comments

Comments
 (0)