Skip to content

Conversation

@andrewlock
Copy link
Member

Summary of changes

  • Fixes a bug in AppSettings extraction in dd-dotnet
  • Adds additional checks to iis check <site> to check for partial trust or the legacy CAS mode

Reason for change

We recently had an escalation where legacy CAS mode was the problem, but it took a long time to identify. Adding a check to the tool should improve the time to resolution (and allow customers to identify the issue themselves) more quickly.

Implementation details

Read the system.web/trust node from the application's web.config and check the level and legacyCasModel properties. If they reveal a problem, report it. I've largely ignored the .NET Core/.NET Framework aspect here, as it's super niche. Worst case we report something that doesn't actually matter (but it would be a weird config setup).

Also noticed that GetAppSettings wasn't getting the correct settings for the app,.

Test coverage

Manually tested it all locally with various configurations, setting the values in root and leaf configs, etc and confirmed it all works as expected (config flattening including on nested apps).

Other details

Theoretically runtime/NetFx40_LegacySecurityPolicy should play into it too, but AFAICT, that doesn't apply to aspnet apps, so it's not the focus of this PR. If we need to, we could check it for non-iis apps, but that's pretty niche right now.

@dd-trace-dotnet-ci-bot
Copy link

dd-trace-dotnet-ci-bot bot commented Nov 5, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7779) and master.

✅ No regressions detected - check the details below

Full Metrics Comparison

FakeDbCommand

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration68.18 ± (68.19 - 68.45) ms68.18 ± (68.12 - 68.34) ms+0.0%✅⬆️
.NET Framework 4.8 - Bailout
duration71.96 ± (71.83 - 72.08) ms71.82 ± (71.69 - 71.92) ms-0.2%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1042.85 ± (1044.00 - 1049.22) ms1046.69 ± (1050.33 - 1058.15) ms+0.4%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.04 ± (22.00 - 22.08) ms21.95 ± (21.91 - 21.99) ms-0.4%
process.time_to_main_ms79.05 ± (78.89 - 79.21) ms78.91 ± (78.76 - 79.06) ms-0.2%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.94 ± (10.93 - 10.94) MB10.90 ± (10.90 - 10.91) MB-0.3%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms21.90 ± (21.87 - 21.92) ms21.91 ± (21.88 - 21.94) ms+0.1%✅⬆️
process.time_to_main_ms80.20 ± (80.11 - 80.29) ms79.90 ± (79.81 - 79.98) ms-0.4%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.96 ± (10.95 - 10.96) MB10.93 ± (10.93 - 10.93) MB-0.2%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms209.64 ± (208.34 - 210.93) ms208.94 ± (207.55 - 210.32) ms-0.3%
process.time_to_main_ms513.71 ± (513.19 - 514.23) ms514.53 ± (513.99 - 515.06) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed52.64 ± (52.62 - 52.66) MB52.59 ± (52.57 - 52.61) MB-0.1%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%
.NET 6 - Baseline
process.internal_duration_ms20.78 ± (20.75 - 20.81) ms20.72 ± (20.70 - 20.75) ms-0.3%
process.time_to_main_ms68.50 ± (68.38 - 68.62) ms68.29 ± (68.14 - 68.44) ms-0.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.60 ± (10.60 - 10.61) MB10.61 ± (10.61 - 10.62) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.79 ± (20.76 - 20.81) ms20.60 ± (20.58 - 20.63) ms-0.9%
process.time_to_main_ms69.53 ± (69.45 - 69.60) ms68.94 ± (68.88 - 68.99) ms-0.9%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.64 ± (10.63 - 10.64) MB10.65 ± (10.65 - 10.66) MB+0.2%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms199.26 ± (196.98 - 201.55) ms204.32 ± (200.99 - 207.65) ms+2.5%✅⬆️
process.time_to_main_ms483.49 ± (482.91 - 484.06) ms482.92 ± (482.37 - 483.46) ms-0.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed51.60 ± (51.53 - 51.66) MB51.43 ± (51.35 - 51.50) MB-0.3%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.0%
.NET 8 - Baseline
process.internal_duration_ms18.97 ± (18.94 - 19.00) ms19.01 ± (18.98 - 19.04) ms+0.2%✅⬆️
process.time_to_main_ms67.53 ± (67.42 - 67.64) ms67.35 ± (67.22 - 67.47) ms-0.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.66 ± (7.66 - 7.67) MB7.62 ± (7.61 - 7.62) MB-0.6%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms18.95 ± (18.92 - 18.98) ms18.85 ± (18.81 - 18.89) ms-0.5%
process.time_to_main_ms68.51 ± (68.44 - 68.58) ms68.23 ± (68.14 - 68.31) ms-0.4%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.70 ± (7.70 - 7.71) MB7.67 ± (7.66 - 7.68) MB-0.5%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms177.42 ± (176.49 - 178.34) ms178.44 ± (177.46 - 179.42) ms+0.6%✅⬆️
process.time_to_main_ms458.64 ± (458.17 - 459.10) ms455.21 ± (454.73 - 455.69) ms-0.7%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed38.74 ± (38.71 - 38.76) MB38.63 ± (38.60 - 38.66) MB-0.3%
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.1%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration192.37 ± (192.36 - 193.23) ms192.42 ± (192.48 - 193.36) ms+0.0%✅⬆️
.NET Framework 4.8 - Bailout
duration195.65 ± (195.54 - 196.06) ms195.49 ± (195.21 - 195.82) ms-0.1%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1160.64 ± (1167.14 - 1177.47) ms1156.22 ± (1159.06 - 1167.26) ms-0.4%
.NET Core 3.1 - Baseline
process.internal_duration_ms187.77 ± (187.46 - 188.08) ms187.95 ± (187.51 - 188.40) ms+0.1%✅⬆️
process.time_to_main_ms81.15 ± (80.89 - 81.40) ms81.28 ± (81.00 - 81.55) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.09 ± (16.07 - 16.12) MB16.06 ± (16.03 - 16.08) MB-0.2%
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (19 - 20)+0.3%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms187.16 ± (186.79 - 187.52) ms187.06 ± (186.73 - 187.39) ms-0.1%
process.time_to_main_ms82.20 ± (82.02 - 82.39) ms81.83 ± (81.65 - 82.02) ms-0.5%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.17 ± (16.14 - 16.20) MB16.14 ± (16.11 - 16.17) MB-0.2%
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+0.5%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms394.45 ± (392.01 - 396.90) ms394.69 ± (392.13 - 397.25) ms+0.1%✅⬆️
process.time_to_main_ms517.10 ± (516.48 - 517.72) ms516.83 ± (516.19 - 517.47) ms-0.1%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed63.13 ± (62.98 - 63.28) MB62.90 ± (62.74 - 63.06) MB-0.4%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.1%
.NET 6 - Baseline
process.internal_duration_ms192.10 ± (191.74 - 192.46) ms190.58 ± (190.30 - 190.86) ms-0.8%
process.time_to_main_ms70.20 ± (70.01 - 70.38) ms69.13 ± (68.99 - 69.27) ms-1.5%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.16 ± (16.04 - 16.28) MB15.79 ± (15.62 - 15.96) MB-2.3%
runtime.dotnet.threads.count19 ± (19 - 19)18 ± (18 - 18)-4.2%
.NET 6 - Bailout
process.internal_duration_ms190.71 ± (190.42 - 191.00) ms189.76 ± (189.53 - 189.99) ms-0.5%
process.time_to_main_ms70.74 ± (70.63 - 70.85) ms70.08 ± (70.02 - 70.15) ms-0.9%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.03 ± (15.88 - 16.18) MB16.13 ± (15.97 - 16.28) MB+0.6%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.2%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms409.80 ± (406.92 - 412.67) ms417.47 ± (414.26 - 420.68) ms+1.9%✅⬆️
process.time_to_main_ms487.42 ± (486.86 - 487.98) ms485.39 ± (484.79 - 486.00) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed62.40 ± (62.27 - 62.54) MB62.16 ± (62.03 - 62.29) MB-0.4%
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 29)-0.2%
.NET 8 - Baseline
process.internal_duration_ms189.36 ± (189.03 - 189.69) ms189.33 ± (188.94 - 189.73) ms-0.0%
process.time_to_main_ms69.26 ± (69.10 - 69.43) ms69.01 ± (68.83 - 69.18) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.81 ± (11.78 - 11.83) MB11.73 ± (11.69 - 11.77) MB-0.7%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.6%
.NET 8 - Bailout
process.internal_duration_ms188.42 ± (188.14 - 188.70) ms187.78 ± (187.58 - 187.99) ms-0.3%
process.time_to_main_ms70.29 ± (70.21 - 70.38) ms69.87 ± (69.80 - 69.94) ms-0.6%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.89 ± (11.84 - 11.94) MB11.81 ± (11.78 - 11.84) MB-0.7%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-0.1%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms360.10 ± (358.56 - 361.63) ms358.35 ± (356.97 - 359.73) ms-0.5%
process.time_to_main_ms465.13 ± (464.41 - 465.85) ms458.57 ± (457.84 - 459.30) ms-1.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed50.32 ± (50.27 - 50.36) MB50.39 ± (50.35 - 50.43) MB+0.1%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.4%✅⬆️
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 (7779) - mean (68ms)  : 67, 70
    master - mean (68ms)  : 67, 70

    section Bailout
    This PR (7779) - mean (72ms)  : 71, 73
    master - mean (72ms)  : 71, 73

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (1,054ms)  : 998, 1110
    master - mean (1,047ms)  : 1010, 1083

Loading
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 (7779) - mean (106ms)  : 103, 109
    master - mean (107ms)  : 104, 109

    section Bailout
    This PR (7779) - mean (107ms)  : 105, 108
    master - mean (107ms)  : 106, 109

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (752ms)  : 725, 778
    master - mean (759ms)  : 727, 790

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7779) - mean (94ms)  : 92, 96
    master - mean (94ms)  : 91, 97

    section Bailout
    This PR (7779) - mean (94ms)  : 93, 95
    master - mean (95ms)  : 94, 96

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (718ms)  : 671, 765
    master - mean (711ms)  : 674, 748

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7779) - mean (93ms)  : 91, 95
    master - mean (93ms)  : 91, 95

    section Bailout
    This PR (7779) - mean (93ms)  : 92, 94
    master - mean (93ms)  : 92, 95

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (661ms)  : 646, 676
    master - mean (664ms)  : 649, 678

Loading
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 (7779) - mean (193ms)  : 188, 197
    master - mean (193ms)  : 189, 197

    section Bailout
    This PR (7779) - mean (196ms)  : 192, 199
    master - mean (196ms)  : 193, 198

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (1,163ms)  : 1104, 1222
    master - mean (1,172ms)  : 1094, 1250

Loading
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 (7779) - mean (278ms)  : 271, 284
    master - mean (278ms)  : 272, 283

    section Bailout
    This PR (7779) - mean (277ms)  : 271, 282
    master - mean (278ms)  : 272, 284

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (941ms)  : 899, 983
    master - mean (954ms)  : 915, 992

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7779) - mean (268ms)  : 264, 272
    master - mean (270ms)  : 265, 276

    section Bailout
    This PR (7779) - mean (268ms)  : 265, 271
    master - mean (270ms)  : 266, 273

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (931ms)  : 875, 987
    master - mean (933ms)  : 885, 980

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7779) - mean (268ms)  : 262, 274
    master - mean (268ms)  : 264, 273

    section Bailout
    This PR (7779) - mean (267ms)  : 264, 270
    master - mean (268ms)  : 265, 272

    section CallTarget+Inlining+NGEN
    This PR (7779) - mean (848ms)  : 830, 865
    master - mean (858ms)  : 839, 876

Loading

@andrewlock andrewlock marked this pull request as ready for review November 5, 2025 13:02
@andrewlock andrewlock requested a review from a team as a code owner November 5, 2025 13:02
Copy link

@chatgpt-codex-connector chatgpt-codex-connector bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to 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 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Copy link
Contributor

@link04 link04 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow Ty man! All I could think about after finding out what the issue was 💀

@pr-commenter
Copy link

pr-commenter bot commented Nov 5, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7779 compared to master:

  • 2 benchmarks are slower, with geometric mean 1.153
  • 3 benchmarks have fewer allocations
  • 4 benchmarks have more allocations

The following thresholds were used for comparing the benchmark speeds:

  • Mann–Whitney U test with statistical test for significance of 5%
  • Only results indicating a difference greater than 10% and 0.3 ns are considered.

Allocation changes below 0.5% are ignored.

Benchmark details

Benchmarks.Trace.ActivityBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 10.3μs 42.4ns 175ns 0 0 0 5.52 KB
master StartStopWithChild netcoreapp3.1 13.7μs 65.3ns 269ns 0 0 0 5.71 KB
master StartStopWithChild net472 21.9μs 110ns 517ns 1 0.401 0.1 5.99 KB
#7779 StartStopWithChild net6.0 10.7μs 59.3ns 351ns 0 0 0 5.52 KB
#7779 StartStopWithChild netcoreapp3.1 13.9μs 71.2ns 326ns 0 0 0 5.68 KB
#7779 StartStopWithChild net472 21.7μs 125ns 958ns 0.859 0.322 0 6 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 953μs 425ns 1.59μs 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.05ms 926ns 3.34μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.24ms 505ns 1.96μs 0 0 0 3.31 KB
#7779 WriteAndFlushEnrichedTraces net6.0 939μs 73ns 273ns 0 0 0 2.71 KB
#7779 WriteAndFlushEnrichedTraces netcoreapp3.1 1.02ms 140ns 523ns 0 0 0 2.7 KB
#7779 WriteAndFlushEnrichedTraces net472 1.2ms 114ns 441ns 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 1.07μs 5.79ns 32.3ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.41μs 7.44ns 38.7ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 1.03μs 0.428ns 1.66ns 0.191 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 7μs 35.3ns 150ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 8.92μs 33.7ns 131ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.65μs 7.71ns 29.9ns 0.729 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 319ns 0.0645ns 0.25ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 398ns 1.93ns 7.96ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 295ns 0.0671ns 0.26ns 0.0432 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.39μs 19.8ns 76.7ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.81μs 38.8ns 165ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.72μs 2.45ns 9.48ns 0.601 0 0 3.8 KB
#7779 AllCycleSimpleBody net6.0 1.08μs 0.639ns 2.48ns 0 0 0 1.22 KB
#7779 AllCycleSimpleBody netcoreapp3.1 1.39μs 7.54ns 42.6ns 0 0 0 1.2 KB
#7779 AllCycleSimpleBody net472 1.06μs 0.698ns 2.7ns 0.191 0 0 1.23 KB
#7779 AllCycleMoreComplexBody net6.0 6.97μs 37.7ns 189ns 0 0 0 4.72 KB
#7779 AllCycleMoreComplexBody netcoreapp3.1 9.11μs 8.4ns 32.6ns 0 0 0 4.62 KB
#7779 AllCycleMoreComplexBody net472 7.61μs 4.96ns 19.2ns 0.721 0 0 4.74 KB
#7779 ObjectExtractorSimpleBody net6.0 314ns 0.0905ns 0.339ns 0 0 0 280 B
#7779 ObjectExtractorSimpleBody netcoreapp3.1 396ns 2.22ns 14.9ns 0 0 0 272 B
#7779 ObjectExtractorSimpleBody net472 296ns 0.0345ns 0.129ns 0.0433 0 0 281 B
#7779 ObjectExtractorMoreComplexBody net6.0 6.34μs 28.7ns 111ns 0 0 0 3.78 KB
#7779 ObjectExtractorMoreComplexBody netcoreapp3.1 7.72μs 38.8ns 165ns 0 0 0 3.69 KB
#7779 ObjectExtractorMoreComplexBody net472 6.7μs 5.5ns 20.6ns 0.571 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 77μs 20.4ns 76.4ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 96.7μs 248ns 961ns 0 0 0 32.4 KB
master EncodeArgs net472 113μs 6.99ns 26.2ns 5.07 0 0 32.51 KB
master EncodeLegacyArgs net6.0 146μs 197ns 765ns 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 197μs 77ns 288ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 263μs 125ns 484ns 0 0 0 2.16 KB
#7779 EncodeArgs net6.0 76.4μs 162ns 627ns 0 0 0 32.4 KB
#7779 EncodeArgs netcoreapp3.1 97.3μs 332ns 1.29μs 0 0 0 32.4 KB
#7779 EncodeArgs net472 109μs 33.5ns 130ns 4.91 0 0 32.51 KB
#7779 EncodeLegacyArgs net6.0 143μs 35.9ns 129ns 0 0 0 2.15 KB
#7779 EncodeLegacyArgs netcoreapp3.1 195μs 285ns 1.1μs 0 0 0 2.14 KB
#7779 EncodeLegacyArgs net472 264μs 233ns 901ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 417μs 63.4ns 237ns 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 411μs 90.8ns 315ns 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 441μs 85.1ns 319ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 291μs 79.9ns 288ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 295μs 83ns 299ns 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 317μs 40.2ns 156ns 0 0 0 2.29 KB
#7779 RunWafRealisticBenchmark net6.0 392μs 47.8ns 185ns 0 0 0 4.55 KB
#7779 RunWafRealisticBenchmark netcoreapp3.1 411μs 263ns 911ns 0 0 0 4.48 KB
#7779 RunWafRealisticBenchmark net472 431μs 89.8ns 348ns 0 0 0 4.66 KB
#7779 RunWafRealisticBenchmarkWithAttack net6.0 285μs 51.3ns 199ns 0 0 0 2.24 KB
#7779 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 298μs 73ns 263ns 0 0 0 2.22 KB
#7779 RunWafRealisticBenchmarkWithAttack net472 309μs 39.5ns 153ns 0 0 0 2.29 KB
Benchmarks.Trace.AspNetCoreBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 61.6μs 27.2ns 106ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 71.6μs 101ns 379ns 0 0 0 17.42 KB
master SendRequest net472 0.00136ns 0.000796ns 0.00298ns 0 0 0 0 b
#7779 SendRequest net6.0 61.5μs 39.7ns 154ns 0 0 0 14.52 KB
#7779 SendRequest netcoreapp3.1 72.5μs 68.7ns 266ns 0 0 0 17.42 KB
#7779 SendRequest net472 0.00612ns 0.00227ns 0.00881ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7779

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑netcoreapp3.1 1 B 0 b -1 B -100.00%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.92ms 1.96μs 7.35μs 0 0 0 640.01 KB
master OriginalCharSlice netcoreapp3.1 2.21ms 6.9μs 25.8μs 0 0 0 640 KB
master OriginalCharSlice net472 2.55ms 80.9ns 303ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.39ms 182ns 705ns 0 0 0 7 B
master OptimizedCharSlice netcoreapp3.1 1.68ms 1.67μs 6.45μs 0 0 0 1 B
master OptimizedCharSlice net472 2.01ms 283ns 1.1μs 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 857μs 101ns 393ns 0 0 0 3 B
master OptimizedCharSliceWithPool netcoreapp3.1 808μs 62.5ns 242ns 0 0 0 1 B
master OptimizedCharSliceWithPool net472 1.13ms 91.4ns 354ns 0 0 0 0 b
#7779 OriginalCharSlice net6.0 1.92ms 485ns 1.81μs 0 0 0 640.01 KB
#7779 OriginalCharSlice netcoreapp3.1 2.16ms 7.39μs 26.6μs 0 0 0 640 KB
#7779 OriginalCharSlice net472 2.65ms 98.5ns 368ns 100 0 0 641.95 KB
#7779 OptimizedCharSlice net6.0 1.42ms 282ns 1.06μs 0 0 0 7 B
#7779 OptimizedCharSlice netcoreapp3.1 1.68ms 358ns 1.39μs 0 0 0 1 B
#7779 OptimizedCharSlice net472 1.97ms 255ns 987ns 0 0 0 0 b
#7779 OptimizedCharSliceWithPool net6.0 852μs 25ns 93.6ns 0 0 0 3 B
#7779 OptimizedCharSliceWithPool netcoreapp3.1 842μs 69.6ns 269ns 0 0 0 0 b
#7779 OptimizedCharSliceWithPool net472 1.15ms 137ns 529ns 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7779

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 1.171 866,499.79 1,014,685.21

More allocations ⚠️ in #7779

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 41.84 KB 42.95 KB 1.12 KB 2.67%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 56.49 KB 56.8 KB 306 B 0.54%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 680μs 1.96μs 7.31μs 0 0 0 41.61 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 696μs 1.49μs 5.15μs 0 0 0 41.84 KB
master WriteAndFlushEnrichedTraces net472 869μs 2.97μs 11.5μs 8.33 0 0 56.49 KB
#7779 WriteAndFlushEnrichedTraces net6.0 698μs 3.66μs 18.3μs 0 0 0 41.57 KB
#7779 WriteAndFlushEnrichedTraces netcoreapp3.1 707μs 3.73μs 19μs 0 0 0 42.95 KB
#7779 WriteAndFlushEnrichedTraces net472 1.02ms 5.65μs 33μs 8.33 0 0 56.8 KB
Benchmarks.Trace.DbCommandBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteNonQuery net6.0 1.91μs 4.03ns 15.6ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.66μs 9.81ns 38ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.9μs 3.07ns 11.9ns 0.145 0.0145 0 987 B
#7779 ExecuteNonQuery net6.0 1.94μs 9.52ns 42.6ns 0 0 0 1.02 KB
#7779 ExecuteNonQuery netcoreapp3.1 2.55μs 10.7ns 37ns 0 0 0 1.02 KB
#7779 ExecuteNonQuery net472 2.88μs 4.06ns 15.7ns 0.145 0.0145 0 987 B
Benchmarks.Trace.ElasticsearchBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master CallElasticsearch net6.0 1.74μs 8.1ns 31.4ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.2μs 10.5ns 44.4ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.6μs 3ns 11.6ns 0.162 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.84μs 8.73ns 33.8ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.4μs 11.6ns 46.4ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.67μs 4.86ns 18.8ns 0.165 0 0 1.1 KB
#7779 CallElasticsearch net6.0 1.69μs 1.07ns 4.15ns 0 0 0 1.03 KB
#7779 CallElasticsearch netcoreapp3.1 2.27μs 11.6ns 51.7ns 0 0 0 1.03 KB
#7779 CallElasticsearch net472 3.51μs 4.08ns 15.8ns 0.159 0 0 1.04 KB
#7779 CallElasticsearchAsync net6.0 1.82μs 7.33ns 28.4ns 0 0 0 1.01 KB
#7779 CallElasticsearchAsync netcoreapp3.1 2.37μs 10.8ns 41.7ns 0 0 0 1.08 KB
#7779 CallElasticsearchAsync net472 3.64μs 2.3ns 8.59ns 0.163 0 0 1.1 KB
Benchmarks.Trace.GraphQLBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master ExecuteAsync net6.0 1.84μs 9.26ns 40.3ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.43μs 11.3ns 45.2ns 0 0 0 952 B
master ExecuteAsync net472 2.54μs 3.55ns 13.8ns 0.14 0 0 915 B
#7779 ExecuteAsync net6.0 1.83μs 0.471ns 1.7ns 0 0 0 952 B
#7779 ExecuteAsync netcoreapp3.1 2.54μs 10.3ns 40ns 0 0 0 952 B
#7779 ExecuteAsync net472 2.52μs 2.92ns 11.3ns 0.139 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 7.08μs 8.57ns 33.2ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.87μs 33.1ns 128ns 0 0 0 2.9 KB
master SendAsync net472 12.3μs 8.57ns 32.1ns 0.493 0 0 3.18 KB
#7779 SendAsync net6.0 6.86μs 5.39ns 20.9ns 0 0 0 2.36 KB
#7779 SendAsync netcoreapp3.1 8.48μs 19.1ns 74ns 0 0 0 2.9 KB
#7779 SendAsync net472 12.3μs 7.62ns 29.5ns 0.492 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7779

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 255.14 KB 277.14 KB 22 KB 8.62%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.59 KB 44.67 KB 1.08 KB 2.48%

Fewer allocations 🎉 in #7779

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 45.5 KB 42.64 KB -2.86 KB -6.29%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 278.42 KB 256.72 KB -21.7 KB -7.80%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 41.7μs 160ns 578ns 0 0 0 43.59 KB
master StringConcatBenchmark netcoreapp3.1 54.9μs 944ns 9.39μs 0 0 0 45.5 KB
master StringConcatBenchmark net472 57.6μs 91.6ns 330ns 0 0 0 65.54 KB
master StringConcatAspectBenchmark net6.0 474μs 1.52μs 5.28μs 0 0 0 278.42 KB
master StringConcatAspectBenchmark netcoreapp3.1 488μs 2.49μs 10.8μs 0 0 0 255.14 KB
master StringConcatAspectBenchmark net472 409μs 2.31μs 15.5μs 0 0 0 278.53 KB
#7779 StringConcatBenchmark net6.0 46.1μs 269ns 2.55μs 0 0 0 44.67 KB
#7779 StringConcatBenchmark netcoreapp3.1 49.2μs 270ns 1.48μs 0 0 0 42.64 KB
#7779 StringConcatBenchmark net472 57.5μs 121ns 419ns 0 0 0 65.54 KB
#7779 StringConcatAspectBenchmark net6.0 445μs 2.09μs 10.7μs 0 0 0 256.72 KB
#7779 StringConcatAspectBenchmark netcoreapp3.1 526μs 1.97μs 7.38μs 0 0 0 277.14 KB
#7779 StringConcatAspectBenchmark net472 406μs 2.18μs 11.7μs 0 0 0 279.81 KB
Benchmarks.Trace.ILoggerBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 2.61μs 14ns 72.6ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.69μs 17.6ns 70.4ns 0 0 0 1.7 KB
master EnrichedLog net472 4.01μs 9.66ns 37.4ns 0.242 0 0 1.64 KB
#7779 EnrichedLog net6.0 2.7μs 13.8ns 63.4ns 0 0 0 1.7 KB
#7779 EnrichedLog netcoreapp3.1 3.57μs 14ns 54.4ns 0 0 0 1.7 KB
#7779 EnrichedLog net472 4.07μs 8.11ns 31.4ns 0.246 0 0 1.64 KB
Benchmarks.Trace.Log4netBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 122μs 97.1ns 350ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 129μs 392ns 1.52μs 0 0 0 4.31 KB
master EnrichedLog net472 167μs 62ns 232ns 0 0 0 4.51 KB
#7779 EnrichedLog net6.0 123μs 110ns 398ns 0 0 0 4.31 KB
#7779 EnrichedLog netcoreapp3.1 127μs 150ns 582ns 0 0 0 4.31 KB
#7779 EnrichedLog net472 166μs 105ns 408ns 0 0 0 4.52 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 5μs 16ns 61.9ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.84μs 12.2ns 45.5ns 0 0 0 2.26 KB
master EnrichedLog net472 7.52μs 6.02ns 22.5ns 0.302 0 0 2.08 KB
#7779 EnrichedLog net6.0 5.21μs 18ns 69.7ns 0 0 0 2.26 KB
#7779 EnrichedLog netcoreapp3.1 7.11μs 8.9ns 34.5ns 0 0 0 2.26 KB
#7779 EnrichedLog net472 7.53μs 9.5ns 36.8ns 0.298 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 2.02μs 9.72ns 37.6ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.61μs 13.1ns 58.5ns 0 0 0 1.2 KB
master SendReceive net472 3.09μs 2.48ns 9.61ns 0.185 0 0 1.2 KB
#7779 SendReceive net6.0 2.02μs 9.07ns 35.1ns 0 0 0 1.2 KB
#7779 SendReceive netcoreapp3.1 2.64μs 12.9ns 54.5ns 0 0 0 1.2 KB
#7779 SendReceive net472 3.07μs 2.96ns 11.4ns 0.184 0 0 1.2 KB
Benchmarks.Trace.SerilogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 4.09μs 17.4ns 67.5ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.8μs 11.4ns 44.2ns 0 0 0 1.63 KB
master EnrichedLog net472 6.73μs 9.84ns 38.1ns 0.303 0 0 2.03 KB
#7779 EnrichedLog net6.0 4.23μs 4.64ns 17.3ns 0 0 0 1.58 KB
#7779 EnrichedLog netcoreapp3.1 5.67μs 13.1ns 50.8ns 0 0 0 1.63 KB
#7779 EnrichedLog net472 6.53μs 6.35ns 22.9ns 0.292 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7779

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.SpanBenchmark.StartFinishScope‑net6.0 1.135 914.79 1,037.96

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartFinishSpan net6.0 764ns 3.95ns 18.5ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 959ns 4.95ns 23.2ns 0 0 0 576 B
master StartFinishSpan net472 927ns 0.386ns 1.5ns 0.0885 0 0 578 B
master StartFinishScope net6.0 905ns 4.85ns 26.1ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.19μs 2.53ns 9.8ns 0 0 0 696 B
master StartFinishScope net472 1.12μs 0.538ns 2.01ns 0.102 0 0 658 B
#7779 StartFinishSpan net6.0 786ns 3.8ns 14.7ns 0 0 0 576 B
#7779 StartFinishSpan netcoreapp3.1 984ns 0.404ns 1.57ns 0 0 0 576 B
#7779 StartFinishSpan net472 918ns 0.557ns 2.16ns 0.088 0 0 578 B
#7779 StartFinishScope net6.0 1.03μs 4.69ns 19.9ns 0 0 0 696 B
#7779 StartFinishScope netcoreapp3.1 1.22μs 1.51ns 5.86ns 0 0 0 696 B
#7779 StartFinishScope net472 1.12μs 0.583ns 2.26ns 0.0991 0 0 658 B
Benchmarks.Trace.TraceAnnotationsBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunOnMethodBegin net6.0 1.08μs 5.76ns 28.8ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.47μs 7.42ns 32.3ns 0 0 0 696 B
master RunOnMethodBegin net472 1.46μs 0.673ns 2.61ns 0.102 0 0 658 B
#7779 RunOnMethodBegin net6.0 1.07μs 5.23ns 23.4ns 0 0 0 696 B
#7779 RunOnMethodBegin netcoreapp3.1 1.45μs 5.66ns 21.9ns 0 0 0 696 B
#7779 RunOnMethodBegin net472 1.47μs 4.49ns 17.4ns 0.104 0 0 658 B

Copy link
Collaborator

@bouwkast bouwkast left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome thanks!

@andrewlock andrewlock merged commit 4888a57 into master Nov 5, 2025
152 checks passed
@andrewlock andrewlock deleted the andrew/dd-trace-partial-trust-detection branch November 5, 2025 17:49
@github-actions github-actions bot added this to the vNext-v3 milestone Nov 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants