[Profiler] Cleanup generic method frame encoding and namespaceless types - #8961
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 97a8153295
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8961) and master.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 191.33 ± (191.26 - 192.06) ms | 208.93 ± (208.48 - 209.39) ms | +9.2% | ❌⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 195.07 ± (195.02 - 195.45) ms | 211.65 ± (211.37 - 212.14) ms | +8.5% | ❌⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1174.32 ± (1175.82 - 1183.25) ms | 1244.85 ± (1243.56 - 1249.88) ms | +6.0% | ❌⬆️ |
Full Metrics Comparison
FakeDbCommand
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 74.01 ± (73.73 - 74.28) ms | 70.84 ± (70.95 - 71.29) ms | -4.3% | ✅ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 76.13 ± (75.94 - 76.44) ms | 75.20 ± (75.16 - 75.48) ms | -1.2% | ✅ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1083.43 ± (1085.28 - 1092.10) ms | 1087.56 ± (1088.54 - 1096.00) ms | +0.4% | ✅⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 22.28 ± (22.24 - 22.33) ms | 22.16 ± (22.12 - 22.20) ms | -0.5% | ✅ |
| process.time_to_main_ms | 83.33 ± (83.07 - 83.58) ms | 81.29 ± (81.11 - 81.46) ms | -2.4% | ✅ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 11.00 ± (10.99 - 11.00) MB | 10.99 ± (10.99 - 10.99) MB | -0.1% | ✅ |
| runtime.dotnet.threads.count | 12 ± (12 - 12) | 12 ± (12 - 12) | +0.0% | ✅ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 22.03 ± (22.00 - 22.06) ms | 22.06 ± (22.03 - 22.09) ms | +0.1% | ✅⬆️ |
| process.time_to_main_ms | 83.07 ± (82.91 - 83.23) ms | 82.41 ± (82.26 - 82.57) ms | -0.8% | ✅ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 11.03 ± (11.03 - 11.04) MB | 11.02 ± (11.02 - 11.03) MB | -0.1% | ✅ |
| runtime.dotnet.threads.count | 13 ± (13 - 13) | 13 ± (13 - 13) | +0.0% | ✅ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 209.16 ± (208.28 - 210.04) ms | 211.04 ± (209.96 - 212.12) ms | +0.9% | ✅⬆️ |
| process.time_to_main_ms | 533.77 ± (532.47 - 535.06) ms | 540.96 ± (539.66 - 542.26) ms | +1.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 49.67 ± (49.63 - 49.70) MB | 49.55 ± (49.51 - 49.59) MB | -0.2% | ✅ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | -0.0% | ✅ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 21.04 ± (21.00 - 21.08) ms | 20.73 ± (20.70 - 20.77) ms | -1.4% | ✅ |
| process.time_to_main_ms | 73.86 ± (73.61 - 74.11) ms | 70.84 ± (70.70 - 70.98) ms | -4.1% | ✅ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 10.72 ± (10.72 - 10.72) MB | 10.73 ± (10.73 - 10.73) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 20.82 ± (20.78 - 20.86) ms | 20.71 ± (20.69 - 20.74) ms | -0.5% | ✅ |
| process.time_to_main_ms | 72.43 ± (72.28 - 72.58) ms | 72.08 ± (71.94 - 72.23) ms | -0.5% | ✅ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 10.85 ± (10.84 - 10.85) MB | 10.85 ± (10.85 - 10.86) MB | +0.1% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 368.25 ± (366.12 - 370.38) ms | 370.82 ± (368.68 - 372.96) ms | +0.7% | ✅⬆️ |
| process.time_to_main_ms | 544.80 ± (543.56 - 546.04) ms | 544.56 ± (543.48 - 545.64) ms | -0.0% | ✅ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 50.66 ± (50.64 - 50.67) MB | 50.65 ± (50.63 - 50.66) MB | -0.0% | ✅ |
| runtime.dotnet.threads.count | 28 ± (28 - 28) | 28 ± (28 - 28) | -0.3% | ✅ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 19.18 ± (19.15 - 19.21) ms | 19.36 ± (19.32 - 19.39) ms | +0.9% | ✅⬆️ |
| process.time_to_main_ms | 70.19 ± (70.03 - 70.35) ms | 73.31 ± (73.07 - 73.55) ms | +4.4% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 7.77 ± (7.76 - 7.77) MB | 7.77 ± (7.76 - 7.77) MB | +0.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 10 ± (10 - 10) | 10 ± (10 - 10) | +0.0% | ✅ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 19.19 ± (19.15 - 19.23) ms | 19.02 ± (18.99 - 19.04) ms | -0.9% | ✅ |
| process.time_to_main_ms | 73.67 ± (73.43 - 73.91) ms | 71.86 ± (71.69 - 72.03) ms | -2.5% | ✅ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 7.82 ± (7.81 - 7.82) MB | 7.83 ± (7.82 - 7.84) MB | +0.2% | ✅⬆️ |
| runtime.dotnet.threads.count | 11 ± (11 - 11) | 11 ± (11 - 11) | +0.0% | ✅ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 297.76 ± (295.42 - 300.10) ms | 295.55 ± (293.16 - 297.93) ms | -0.7% | ✅ |
| process.time_to_main_ms | 490.56 ± (489.75 - 491.38) ms | 496.29 ± (495.04 - 497.54) ms | +1.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 0 ± (0 - 0) | 0 ± (0 - 0) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 38.07 ± (38.04 - 38.10) MB | 38.04 ± (38.01 - 38.06) MB | -0.1% | ✅ |
| runtime.dotnet.threads.count | 27 ± (27 - 27) | 27 ± (27 - 27) | -0.0% | ✅ |
HttpMessageHandler
| Metric | Master (Mean ± 95% CI) | Current (Mean ± 95% CI) | Change | Status |
|---|---|---|---|---|
| .NET Framework 4.8 - Baseline | ||||
| duration | 191.33 ± (191.26 - 192.06) ms | 208.93 ± (208.48 - 209.39) ms | +9.2% | ❌⬆️ |
| .NET Framework 4.8 - Bailout | ||||
| duration | 195.07 ± (195.02 - 195.45) ms | 211.65 ± (211.37 - 212.14) ms | +8.5% | ❌⬆️ |
| .NET Framework 4.8 - CallTarget+Inlining+NGEN | ||||
| duration | 1174.32 ± (1175.82 - 1183.25) ms | 1244.85 ± (1243.56 - 1249.88) ms | +6.0% | ❌⬆️ |
| .NET Core 3.1 - Baseline | ||||
| process.internal_duration_ms | 188.06 ± (187.65 - 188.47) ms | 200.02 ± (199.65 - 200.40) ms | +6.4% | ✅⬆️ |
| process.time_to_main_ms | 82.51 ± (82.23 - 82.78) ms | 88.06 ± (87.74 - 88.38) ms | +6.7% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.24 ± (16.22 - 16.27) MB | 16.09 ± (16.06 - 16.11) MB | -1.0% | ✅ |
| runtime.dotnet.threads.count | 19 ± (19 - 20) | 20 ± (20 - 20) | +0.5% | ✅⬆️ |
| .NET Core 3.1 - Bailout | ||||
| process.internal_duration_ms | 190.97 ± (190.58 - 191.36) ms | 199.84 ± (199.46 - 200.22) ms | +4.6% | ✅⬆️ |
| process.time_to_main_ms | 85.10 ± (84.91 - 85.28) ms | 89.93 ± (89.68 - 90.19) ms | +5.7% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.29 ± (16.26 - 16.31) MB | 16.14 ± (16.12 - 16.16) MB | -0.9% | ✅ |
| runtime.dotnet.threads.count | 21 ± (20 - 21) | 21 ± (21 - 21) | +1.0% | ✅⬆️ |
| .NET Core 3.1 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 380.59 ± (379.29 - 381.90) ms | 398.62 ± (397.24 - 400.00) ms | +4.7% | ✅⬆️ |
| process.time_to_main_ms | 535.63 ± (534.55 - 536.70) ms | 559.92 ± (558.67 - 561.18) ms | +4.5% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 3 ± (3 - 3) | 3 ± (3 - 3) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 57.97 ± (57.91 - 58.02) MB | 59.70 ± (59.54 - 59.85) MB | +3.0% | ✅⬆️ |
| runtime.dotnet.threads.count | 30 ± (30 - 30) | 30 ± (30 - 30) | +1.3% | ✅⬆️ |
| .NET 6 - Baseline | ||||
| process.internal_duration_ms | 190.92 ± (190.66 - 191.18) ms | 206.10 ± (205.55 - 206.64) ms | +7.9% | ✅⬆️ |
| process.time_to_main_ms | 71.56 ± (71.38 - 71.75) ms | 77.53 ± (77.25 - 77.82) ms | +8.3% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.26 ± (16.11 - 16.42) MB | 16.40 ± (16.37 - 16.43) MB | +0.8% | ✅⬆️ |
| runtime.dotnet.threads.count | 18 ± (18 - 18) | 19 ± (19 - 20) | +8.0% | ✅⬆️ |
| .NET 6 - Bailout | ||||
| process.internal_duration_ms | 190.81 ± (190.53 - 191.09) ms | 205.21 ± (204.73 - 205.69) ms | +7.5% | ✅⬆️ |
| process.time_to_main_ms | 72.65 ± (72.54 - 72.76) ms | 78.38 ± (78.15 - 78.60) ms | +7.9% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 16.23 ± (16.08 - 16.39) MB | 16.52 ± (16.49 - 16.54) MB | +1.7% | ✅⬆️ |
| runtime.dotnet.threads.count | 20 ± (19 - 20) | 21 ± (20 - 21) | +4.0% | ✅⬆️ |
| .NET 6 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 581.60 ± (579.18 - 584.03) ms | 579.57 ± (577.19 - 581.95) ms | -0.3% | ✅ |
| process.time_to_main_ms | 548.75 ± (547.20 - 550.29) ms | 571.94 ± (570.67 - 573.22) ms | +4.2% | ✅⬆️ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 61.65 ± (61.58 - 61.71) MB | 61.44 ± (61.39 - 61.49) MB | -0.3% | ✅ |
| runtime.dotnet.threads.count | 31 ± (31 - 31) | 31 ± (31 - 31) | -0.2% | ✅ |
| .NET 8 - Baseline | ||||
| process.internal_duration_ms | 207.54 ± (207.15 - 207.93) ms | 205.46 ± (205.03 - 205.90) ms | -1.0% | ✅ |
| process.time_to_main_ms | 78.05 ± (77.77 - 78.32) ms | 77.34 ± (77.06 - 77.62) ms | -0.9% | ✅ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 11.72 ± (11.70 - 11.75) MB | 11.82 ± (11.80 - 11.84) MB | +0.8% | ✅⬆️ |
| runtime.dotnet.threads.count | 19 ± (19 - 19) | 19 ± (19 - 19) | -0.2% | ✅ |
| .NET 8 - Bailout | ||||
| process.internal_duration_ms | 207.63 ± (207.18 - 208.07) ms | 205.47 ± (204.98 - 205.96) ms | -1.0% | ✅ |
| process.time_to_main_ms | 79.47 ± (79.25 - 79.68) ms | 78.43 ± (78.17 - 78.70) ms | -1.3% | ✅ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 11.79 ± (11.77 - 11.81) MB | 11.83 ± (11.81 - 11.85) MB | +0.4% | ✅⬆️ |
| runtime.dotnet.threads.count | 20 ± (20 - 20) | 20 ± (20 - 20) | -0.2% | ✅ |
| .NET 8 - CallTarget+Inlining+NGEN | ||||
| process.internal_duration_ms | 514.54 ± (509.77 - 519.32) ms | 509.82 ± (506.11 - 513.53) ms | -0.9% | ✅ |
| process.time_to_main_ms | 525.91 ± (525.01 - 526.81) ms | 523.97 ± (523.08 - 524.85) ms | -0.4% | ✅ |
| runtime.dotnet.exceptions.count | 4 ± (4 - 4) | 4 ± (4 - 4) | +0.0% | ✅ |
| runtime.dotnet.mem.committed | 51.43 ± (51.37 - 51.48) MB | 51.42 ± (51.37 - 51.46) MB | -0.0% | ✅ |
| runtime.dotnet.threads.count | 30 ± (30 - 30) | 30 ± (30 - 30) | -0.1% | ✅ |
Comparison explanation
Execution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
- Welch test with statistical test for significance of 5%
- Only results indicating a difference greater than 5% and 5 ms are considered.
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard.
Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph).
Duration charts
FakeDbCommand (.NET Framework 4.8)
gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (71ms) : 69, 74
master - mean (74ms) : 70, 78
section Bailout
This PR (8961) - mean (75ms) : 74, 77
master - mean (76ms) : 73, 80
section CallTarget+Inlining+NGEN
This PR (8961) - mean (1,092ms) : 1038, 1147
master - mean (1,089ms) : 1038, 1139
FakeDbCommand (.NET Core 3.1)
gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (110ms) : 106, 114
master - mean (113ms) : 108, 118
section Bailout
This PR (8961) - mean (111ms) : 108, 113
master - mean (112ms) : 110, 114
section CallTarget+Inlining+NGEN
This PR (8961) - mean (789ms) : 763, 814
master - mean (781ms) : 759, 804
FakeDbCommand (.NET 6)
gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (98ms) : 95, 101
master - mean (102ms) : 96, 108
section Bailout
This PR (8961) - mean (99ms) : 97, 101
master - mean (99ms) : 97, 102
section CallTarget+Inlining+NGEN
This PR (8961) - mean (946ms) : 911, 982
master - mean (942ms) : 908, 975
FakeDbCommand (.NET 8)
gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (101ms) : 96, 106
master - mean (96ms) : 93, 99
section Bailout
This PR (8961) - mean (98ms) : 94, 102
master - mean (101ms) : 96, 105
section CallTarget+Inlining+NGEN
This PR (8961) - mean (823ms) : 778, 868
master - mean (819ms) : 782, 856
HttpMessageHandler (.NET Framework 4.8)
gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (209ms) : 204, 214
master - mean (192ms) : 188, 196
section Bailout
This PR (8961) - mean (212ms) : crit, 208, 215
master - mean (195ms) : 193, 197
section CallTarget+Inlining+NGEN
This PR (8961) - mean (1,247ms) : crit, 1201, 1292
master - mean (1,180ms) : 1127, 1233
HttpMessageHandler (.NET Core 3.1)
gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (299ms) : 291, 306
master - mean (280ms) : 272, 288
section Bailout
This PR (8961) - mean (300ms) : 294, 306
master - mean (285ms) : 280, 291
section CallTarget+Inlining+NGEN
This PR (8961) - mean (1,000ms) : 975, 1024
master - mean (957ms) : 933, 982
HttpMessageHandler (.NET 6)
gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (293ms) : 286, 300
master - mean (272ms) : 267, 276
section Bailout
This PR (8961) - mean (292ms) : crit, 286, 299
master - mean (272ms) : 269, 275
section CallTarget+Inlining+NGEN
This PR (8961) - mean (1,188ms) : 1150, 1225
master - mean (1,164ms) : 1119, 1208
HttpMessageHandler (.NET 8)
gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8961) - mean (294ms) : 286, 302
master - mean (297ms) : 289, 305
section Bailout
This PR (8961) - mean (294ms) : 288, 301
master - mean (298ms) : 291, 304
section CallTarget+Inlining+NGEN
This PR (8961) - mean (1,069ms) : 1005, 1133
master - mean (1,076ms) : 1007, 1145
BenchmarksBenchmark execution time: 2026-07-31 12:54:53 Comparing candidate commit 3e5b3d8 in PR branch Found 0 performance improvements and 2 performance regressions! Performance is the same for 70 metrics, 0 unstable metrics, 66 known flaky benchmarks, 60 flaky benchmarks without significant changes.
|
Summary of changes
Ensure that no '.' is added when there is no namespace and provide full type name in generics
Reason for change
Weird
<.<Foo>>or.Bartype names in framesImplementation details
Test coverage
Fix regex and add dedicated tests for better coverage
Other details