Skip to content

Commit a007c03

Browse files
authored
Merge pull request #2470 from martincostello/improve-OpenApiWalker-perf
fix: Improve OpenApiWalker performance
2 parents 3326022 + 09ba682 commit a007c03

11 files changed

+526
-1587
lines changed

.github/workflows/ci-cd.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,13 @@ jobs:
7575
dotnet run -c Release
7676
working-directory: ./performance/benchmark
7777

78+
- name: Publish benchmark results
79+
uses: actions/upload-artifact@v4
80+
with:
81+
if-no-files-found: error
82+
name: benchmark-results
83+
path: "${{ github.workspace }}/performance/benchmark/BenchmarkDotNet.Artifacts/results"
84+
7885
- name: Run comparison tool for empty models
7986
run: dotnet run -c Release --project ./performance/resultsComparer/resultsComparer.csproj -- compare $OLD_REPORT $NEW_REPORT -p IdenticalMemoryUsage
8087
shell: bash

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ ipch/
8888
*.VC.VC.opendb
8989

9090
# Visual Studio profiler
91+
*.diagsession
9192
*.psess
9293
*.vsp
9394
*.vspx
@@ -286,3 +287,7 @@ __pycache__/
286287
*.btm.cs
287288
*.odx.cs
288289
*.xsd.cs
290+
291+
# BenchmarkDotNet profiler files
292+
*.nettrace
293+
*.speedscope.json
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
```
22
3-
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3981)
4-
11th Gen Intel Core i7-1185G7 3.00GHz, 1 CPU, 8 logical and 4 physical cores
5-
.NET SDK 8.0.409
6-
[Host] : .NET 8.0.16 (8.0.1625.21506), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
7-
ShortRun : .NET 8.0.16 (8.0.1625.21506), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
3+
BenchmarkDotNet v0.15.2, Linux Ubuntu 24.04.2 LTS (Noble Numbat)
4+
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
5+
.NET SDK 8.0.413
6+
[Host] : .NET 8.0.19 (8.0.1925.36514), X64 RyuJIT AVX2
7+
ShortRun : .NET 8.0.19 (8.0.1925.36514), X64 RyuJIT AVX2
88
99
Job=ShortRun IterationCount=3 LaunchCount=1
1010
WarmupCount=3
1111
1212
```
13-
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
14-
|------------- |-------------:|--------------:|-------------:|-----------:|-----------:|----------:|-------------:|
15-
| PetStoreYaml | 470.3 μs | 138.05 μs | 7.57 μs | 58.5938 | 11.7188 | - | 380.53 KB |
16-
| PetStoreJson | 166.0 μs | 43.84 μs | 2.40 μs | 39.0625 | 8.7891 | - | 242.67 KB |
17-
| GHESYaml | 915,406.4 μs | 714,492.62 μs | 39,163.75 μs | 68000.0000 | 22000.0000 | 4000.0000 | 395800.98 KB |
18-
| GHESJson | 470,609.4 μs | 264,698.88 μs | 14,509.04 μs | 42000.0000 | 15000.0000 | 3000.0000 | 257270.45 KB |
13+
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Gen2 | Allocated |
14+
|------------- |---------------:|--------------:|------------:|-----------:|-----------:|----------:|-------------:|
15+
| PetStoreYaml | 529.5 μs | 62.50 μs | 3.43 μs | 23.4375 | 3.9063 | - | 387.26 KB |
16+
| PetStoreJson | 240.8 μs | 15.69 μs | 0.86 μs | 13.6719 | 1.9531 | - | 249.1 KB |
17+
| GHESYaml | 1,097,576.6 μs | 100,584.42 μs | 5,513.37 μs | 26000.0000 | 20000.0000 | 3000.0000 | 384492.38 KB |
18+
| GHESJson | 516,328.2 μs | 87,964.22 μs | 4,821.62 μs | 16000.0000 | 9000.0000 | 2000.0000 | 245957.5 KB |
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Gen0,Gen1,Gen2,Allocated
2-
PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,470.3 μs,138.05 μs,7.57 μs,58.5938,11.7188,0.0000,380.53 KB
3-
PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,166.0 μs,43.84 μs,2.40 μs,39.0625,8.7891,0.0000,242.67 KB
4-
GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"915,406.4 μs","714,492.62 μs","39,163.75 μs",68000.0000,22000.0000,4000.0000,395800.98 KB
5-
GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,11111111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"470,609.4 μs","264,698.88 μs","14,509.04 μs",42000.0000,15000.0000,3000.0000,257270.45 KB
2+
PetStoreYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,529.5 μs,62.50 μs,3.43 μs,23.4375,3.9063,0.0000,387.26 KB
3+
PetStoreJson,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,240.8 μs,15.69 μs,0.86 μs,13.6719,1.9531,0.0000,249.1 KB
4+
GHESYaml,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"1,097,576.6 μs","100,584.42 μs","5,513.37 μs",26000.0000,20000.0000,3000.0000,384492.38 KB
5+
GHESJson,ShortRun,False,Default,Default,Default,Default,Default,Default,1111,Empty,RyuJit,Default,X64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 8.0,False,True,False,True,Default,Default,False,False,False,Default,Default,Default,Default,Default,Default,Default,Default,3,Default,1,Default,Default,Default,Default,Default,Default,16,3,"516,328.2 μs","87,964.22 μs","4,821.62 μs",16000.0000,9000.0000,2000.0000,245957.5 KB

performance/benchmark/BenchmarkDotNet.Artifacts/results/performance.Descriptions-report.html

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html lang='en'>
33
<head>
44
<meta charset='utf-8' />
5-
<title>performance.Descriptions-20250514-154213</title>
5+
<title>performance.Descriptions-20250820-142630</title>
66

77
<style type="text/css">
88
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
@@ -13,23 +13,23 @@
1313
</head>
1414
<body>
1515
<pre><code>
16-
BenchmarkDotNet v0.14.0, Windows 11 (10.0.26100.3981)
17-
11th Gen Intel Core i7-1185G7 3.00GHz, 1 CPU, 8 logical and 4 physical cores
18-
.NET SDK 8.0.409
19-
[Host] : .NET 8.0.16 (8.0.1625.21506), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
20-
ShortRun : .NET 8.0.16 (8.0.1625.21506), X64 RyuJIT AVX-512F+CD+BW+DQ+VL+VBMI
16+
BenchmarkDotNet v0.15.2, Linux Ubuntu 24.04.2 LTS (Noble Numbat)
17+
AMD EPYC 7763, 1 CPU, 4 logical and 2 physical cores
18+
.NET SDK 8.0.413
19+
[Host] : .NET 8.0.19 (8.0.1925.36514), X64 RyuJIT AVX2
20+
ShortRun : .NET 8.0.19 (8.0.1925.36514), X64 RyuJIT AVX2
2121
</code></pre>
2222
<pre><code>Job=ShortRun IterationCount=3 LaunchCount=1
2323
WarmupCount=3
2424
</code></pre>
2525

2626
<table>
27-
<thead><tr><th>Method</th><th>Mean </th><th>Error </th><th>StdDev</th><th>Gen0</th><th>Gen1</th><th>Gen2</th><th>Allocated</th>
27+
<thead><tr><th>Method</th><th>Mean </th><th>Error </th><th>StdDev</th><th>Gen0</th><th>Gen1</th><th>Gen2</th><th>Allocated</th>
2828
</tr>
29-
</thead><tbody><tr><td>PetStoreYaml</td><td>470.3 &mu;s</td><td>138.05 &mu;s</td><td>7.57 &mu;s</td><td>58.5938</td><td>11.7188</td><td>-</td><td>380.53 KB</td>
30-
</tr><tr><td>PetStoreJson</td><td>166.0 &mu;s</td><td>43.84 &mu;s</td><td>2.40 &mu;s</td><td>39.0625</td><td>8.7891</td><td>-</td><td>242.67 KB</td>
31-
</tr><tr><td>GHESYaml</td><td>915,406.4 &mu;s</td><td>714,492.62 &mu;s</td><td>39,163.75 &mu;s</td><td>68000.0000</td><td>22000.0000</td><td>4000.0000</td><td>395800.98 KB</td>
32-
</tr><tr><td>GHESJson</td><td>470,609.4 &mu;s</td><td>264,698.88 &mu;s</td><td>14,509.04 &mu;s</td><td>42000.0000</td><td>15000.0000</td><td>3000.0000</td><td>257270.45 KB</td>
29+
</thead><tbody><tr><td>PetStoreYaml</td><td>529.5 &mu;s</td><td>62.50 &mu;s</td><td>3.43 &mu;s</td><td>23.4375</td><td>3.9063</td><td>-</td><td>387.26 KB</td>
30+
</tr><tr><td>PetStoreJson</td><td>240.8 &mu;s</td><td>15.69 &mu;s</td><td>0.86 &mu;s</td><td>13.6719</td><td>1.9531</td><td>-</td><td>249.1 KB</td>
31+
</tr><tr><td>GHESYaml</td><td>1,097,576.6 &mu;s</td><td>100,584.42 &mu;s</td><td>5,513.37 &mu;s</td><td>26000.0000</td><td>20000.0000</td><td>3000.0000</td><td>384492.38 KB</td>
32+
</tr><tr><td>GHESJson</td><td>516,328.2 &mu;s</td><td>87,964.22 &mu;s</td><td>4,821.62 &mu;s</td><td>16000.0000</td><td>9000.0000</td><td>2000.0000</td><td>245957.5 KB</td>
3333
</tr></tbody></table>
3434
</body>
3535
</html>

0 commit comments

Comments
 (0)