Skip to content

Conversation

@andrewlock
Copy link
Member

@andrewlock andrewlock commented Oct 30, 2025

Summary of changes

Updates a couple of places where we're calling Tracer.Instance where we don't need to

Reason for change

In one of my other PRs I accidentally broke something that should only have affected integration tests, but a bunch of unit tests broke. It highlighted where they were using Tracer.Instance and setting the global tracer for tests. In other places, it revealed that code that tests that looked independent of other tests really wasn't...

Calling Tracer.Instance potentially does a lot of work, as it initializes the tracer. It's also hard to follow if we're making static calls out in places we don't need to. So just pass through the settings we want instead.

Implementation details

Instead of calling Tracer.Instance.Settings, use the value of Tracer or TracerSettings that's already available wherever possible. It makes the tests cleaner too.

Test coverage

Same coverage, just a bit cleaner

Other details

Included as part of the config stack, just because I already refactored some of this code, and can't be bothered to faff with merge conflicts:

https://datadoghq.atlassian.net/browse/LANGPLAT-819

@andrewlock andrewlock requested review from a team as code owners October 30, 2025 17:42
@andrewlock andrewlock added area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) area:tests unit tests, integration tests type:reliability area:data-streams-monitoring labels Oct 30, 2025
CommandType = typeof(TCommand);

if (TryGetIntegrationDetails(CommandType.FullName, out var integrationId, out var dbTypeName))
if (TryGetIntegrationDetails(Tracer.Instance.Settings.DisabledAdoNetCommandTypes, CommandType.FullName, out var integrationId, out var dbTypeName))
Copy link
Member Author

Choose a reason for hiding this comment

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

This one is actually kind of annoying. As it's in a static cctor, we can't pass it in anywhere, which means there's one DbScopeFactoryTests test which will use this and end up initializing the global tracer. Oh well.

Copy link
Collaborator

@bouwkast bouwkast Oct 30, 2025

Choose a reason for hiding this comment

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

:sorry: pretty sure this was me

Copy link
Contributor

Choose a reason for hiding this comment

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

Hmm. I understand that we want to minimize work but I feel like we should calculate all DbCommands regardless of config (i.e. no dependency here) and then we do the config check on the hot path, which allows this setting to be hot-reloadable or "config at runtime" ready

Copy link
Contributor

@zacharycmontoya zacharycmontoya Oct 30, 2025

Choose a reason for hiding this comment

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

Concretely, I'm suggesting that we remove the TryGetIntegrationDetails call in the static constructor of Cache<TCommand> and refactor the other call in CreateDbCommandScope a bit. Perhaps in a separate PR

Copy link
Member Author

Choose a reason for hiding this comment

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

I can see arguments both ways tbh.

The only downside to @zacharycmontoya's proposal would be more work to do for custom DbCommands (ones that we don't explicitly know about), which are also marked as disabled initially, and which customers have marked as disabled. The question I would have is whether that's ok - e.g. if they're disabled because we're erroring out literally running TryGetIntegrationDetails, and that's why they disabled it, then that could be a problem. If it's just an optimization, then yes, it probably is fine.

That said, this actually is technically already hot-reloadable. The DisabledAdoNetCommandTypes setting passed in here is used to decide whether to populate the cache for custom types, but if we don't populate the cache, then we run TryGetIntegrationDetails() and check DisabledAdoNetCommandTypes at runtime anyway. So if this changes, then the result changes, it will just never be cached in that scenario.

So on that basis, I think removing the TryGetIntegrationDetails has a small amount of risk (if customer disabled adonet due to errors - not sure if that's really possible, but I can believe it), means a small bit more work (calculating values which will never be used), and doesn't change how hot-reloadable we are in general (though if we made it hot reloadable, we'd have to rethink how caching works). The plus side is it removes the static access to Tracer.Instance which is better for tests.

So yeah, I'm torn 🤷‍♂️ I'd say separate PR either way, given the questions, as the current behaviour in this PR is identical to the existing. But it's worth thinking about

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented Oct 30, 2025

⚠️ Tests

⚠️ Warnings

🧪 41 Tests failed

SubmitsOtlpMetrics from Datadog.Trace.ClrProfiler.IntegrationTests.OpenTelemetrySdkTests (Datadog)
Results do not match.
Differences:
Received: OpenTelemetrySdkTests.SubmitsOtlpMetrics_up_to_1_7_0.NET_7_8.received.txt
Verified: OpenTelemetrySdkTests.SubmitsOtlpMetrics_up_to_1_7_0.NET_7_8.verified.txt
Compare Result:
  [
    {
      "resource_metrics": [
        {
          "resource": {
...
SubmitsOtlpMetrics from Datadog.Trace.ClrProfiler.IntegrationTests.OpenTelemetrySdkTests (Datadog)
Results do not match.
Differences:
Received: OpenTelemetrySdkTests.SubmitsOtlpMetrics_up_to_1_7_0.NET_7_8.received.txt
Verified: OpenTelemetrySdkTests.SubmitsOtlpMetrics_up_to_1_7_0.NET_7_8.verified.txt
Compare Result:
  [
    {
      "resource_metrics": [
        {
          "resource": {
...
SubmitsOtlpMetrics from Datadog.Trace.ClrProfiler.IntegrationTests.OpenTelemetrySdkTests (Datadog)
Results do not match.
Differences:
Received: OpenTelemetrySdkTests.SubmitsOtlpMetrics_up_to_1_7_0.NET_7_8.received.txt
Verified: OpenTelemetrySdkTests.SubmitsOtlpMetrics_up_to_1_7_0.NET_7_8.verified.txt
Compare Result:
  [
    {
      "resource_metrics": [
        {
          "resource": {
...
View all

ℹ️ Info

❄️ No new flaky tests detected

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 6027e13 | Docs | Datadog PR Page | Was this helpful? Give us feedback!

CommandType = typeof(TCommand);

if (TryGetIntegrationDetails(CommandType.FullName, out var integrationId, out var dbTypeName))
if (TryGetIntegrationDetails(Tracer.Instance.Settings.DisabledAdoNetCommandTypes, CommandType.FullName, out var integrationId, out var dbTypeName))
Copy link
Collaborator

@bouwkast bouwkast Oct 30, 2025

Choose a reason for hiding this comment

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

:sorry: pretty sure this was me

[Fact]
public void CanRoundTripPathwayContext()
[Theory]
[CombinatorialData]
Copy link
Collaborator

Choose a reason for hiding this comment

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

😃

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

dd-trace-dotnet-ci-bot bot commented Oct 30, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7744) 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) ms69.61 ± (69.67 - 70.03) ms+2.1%✅⬆️
.NET Framework 4.8 - Bailout
duration71.96 ± (71.83 - 72.08) ms72.81 ± (72.76 - 73.12) ms+1.2%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1042.85 ± (1044.00 - 1049.22) ms1051.98 ± (1051.78 - 1057.39) ms+0.9%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.04 ± (22.00 - 22.08) ms22.10 ± (22.07 - 22.13) ms+0.3%✅⬆️
process.time_to_main_ms79.05 ± (78.89 - 79.21) ms79.42 ± (79.27 - 79.57) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.94 ± (10.93 - 10.94) MB10.89 ± (10.88 - 10.89) MB-0.4%
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.96 ± (21.94 - 21.99) ms+0.3%✅⬆️
process.time_to_main_ms80.20 ± (80.11 - 80.29) ms80.80 ± (80.68 - 80.93) ms+0.8%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.96 ± (10.95 - 10.96) MB10.92 ± (10.91 - 10.92) MB-0.3%
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) ms209.62 ± (208.35 - 210.89) ms-0.0%
process.time_to_main_ms513.71 ± (513.19 - 514.23) ms512.11 ± (511.34 - 512.89) ms-0.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed52.64 ± (52.62 - 52.66) MB52.58 ± (52.56 - 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.93 ± (20.91 - 20.96) ms+0.7%✅⬆️
process.time_to_main_ms68.50 ± (68.38 - 68.62) ms68.91 ± (68.77 - 69.06) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.60 ± (10.60 - 10.61) MB10.58 ± (10.58 - 10.59) MB-0.2%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.79 ± (20.76 - 20.81) ms20.78 ± (20.75 - 20.81) ms-0.0%
process.time_to_main_ms69.53 ± (69.45 - 69.60) ms69.68 ± (69.58 - 69.79) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.64 ± (10.63 - 10.64) MB10.63 ± (10.63 - 10.63) MB-0.1%
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) ms197.23 ± (196.21 - 198.25) ms-1.0%
process.time_to_main_ms483.49 ± (482.91 - 484.06) ms482.07 ± (481.37 - 482.77) ms-0.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed51.60 ± (51.53 - 51.66) MB51.07 ± (50.98 - 51.15) MB-1.0%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.1%
.NET 8 - Baseline
process.internal_duration_ms18.97 ± (18.94 - 19.00) ms18.93 ± (18.90 - 18.95) ms-0.2%
process.time_to_main_ms67.53 ± (67.42 - 67.64) ms67.69 ± (67.56 - 67.82) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.66 ± (7.66 - 7.67) MB7.61 ± (7.60 - 7.61) MB-0.7%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms18.95 ± (18.92 - 18.98) ms18.88 ± (18.86 - 18.91) ms-0.4%
process.time_to_main_ms68.51 ± (68.44 - 68.58) ms68.71 ± (68.61 - 68.82) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.70 ± (7.70 - 7.71) MB7.68 ± (7.67 - 7.69) MB-0.3%
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) ms180.17 ± (179.28 - 181.05) ms+1.5%✅⬆️
process.time_to_main_ms458.64 ± (458.17 - 459.10) ms455.99 ± (455.42 - 456.57) ms-0.6%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed38.74 ± (38.71 - 38.76) MB38.47 ± (38.45 - 38.50) MB-0.7%
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.53 ± (192.86 - 193.69) ms+0.1%✅⬆️
.NET Framework 4.8 - Bailout
duration195.65 ± (195.54 - 196.06) ms196.01 ± (195.76 - 196.27) ms+0.2%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1160.64 ± (1167.14 - 1177.47) ms1164.52 ± (1163.81 - 1170.30) ms+0.3%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms187.77 ± (187.46 - 188.08) ms187.43 ± (187.02 - 187.84) ms-0.2%
process.time_to_main_ms81.15 ± (80.89 - 81.40) ms80.24 ± (80.02 - 80.45) ms-1.1%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.09 ± (16.07 - 16.12) MB16.14 ± (16.11 - 16.17) MB+0.3%✅⬆️
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (20 - 20)+0.6%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms187.16 ± (186.79 - 187.52) ms186.07 ± (185.84 - 186.31) ms-0.6%
process.time_to_main_ms82.20 ± (82.02 - 82.39) ms81.47 ± (81.31 - 81.63) ms-0.9%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.17 ± (16.14 - 16.20) MB16.20 ± (16.17 - 16.22) MB+0.2%✅⬆️
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (20 - 21)+0.0%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms394.45 ± (392.01 - 396.90) ms392.21 ± (390.18 - 394.25) ms-0.6%
process.time_to_main_ms517.10 ± (516.48 - 517.72) ms513.58 ± (512.96 - 514.21) ms-0.7%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed63.13 ± (62.98 - 63.28) MB62.99 ± (62.84 - 63.15) MB-0.2%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 30)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms192.10 ± (191.74 - 192.46) ms191.46 ± (191.09 - 191.84) ms-0.3%
process.time_to_main_ms70.20 ± (70.01 - 70.38) ms69.55 ± (69.40 - 69.71) ms-0.9%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.16 ± (16.04 - 16.28) MB16.02 ± (15.88 - 16.17) MB-0.8%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (18 - 19)-0.5%
.NET 6 - Bailout
process.internal_duration_ms190.71 ± (190.42 - 191.00) ms194.29 ± (193.81 - 194.77) ms+1.9%✅⬆️
process.time_to_main_ms70.74 ± (70.63 - 70.85) ms71.70 ± (71.49 - 71.90) ms+1.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.03 ± (15.88 - 16.18) MB16.35 ± (16.29 - 16.41) MB+2.0%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)20 ± (20 - 20)+4.2%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms409.80 ± (406.92 - 412.67) ms405.97 ± (404.14 - 407.80) ms-0.9%
process.time_to_main_ms487.42 ± (486.86 - 487.98) ms490.92 ± (489.87 - 491.97) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed62.40 ± (62.27 - 62.54) MB62.30 ± (62.18 - 62.43) MB-0.2%
runtime.dotnet.threads.count29 ± (29 - 30)30 ± (29 - 30)+0.2%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms189.36 ± (189.03 - 189.69) ms189.77 ± (189.38 - 190.15) ms+0.2%✅⬆️
process.time_to_main_ms69.26 ± (69.10 - 69.43) ms69.17 ± (68.97 - 69.37) ms-0.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.81 ± (11.78 - 11.83) MB11.70 ± (11.67 - 11.72) MB-0.9%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.1%
.NET 8 - Bailout
process.internal_duration_ms188.42 ± (188.14 - 188.70) ms191.00 ± (190.55 - 191.44) ms+1.4%✅⬆️
process.time_to_main_ms70.29 ± (70.21 - 70.38) ms70.84 ± (70.67 - 71.01) ms+0.8%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.89 ± (11.84 - 11.94) MB11.76 ± (11.74 - 11.78) MB-1.1%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+1.4%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms360.10 ± (358.56 - 361.63) ms359.46 ± (357.96 - 360.96) ms-0.2%
process.time_to_main_ms465.13 ± (464.41 - 465.85) ms458.16 ± (457.49 - 458.83) ms-1.5%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed50.32 ± (50.27 - 50.36) MB50.11 ± (50.08 - 50.15) MB-0.4%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.5%✅⬆️
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 (7744) - mean (70ms)  : 67, 73
    master - mean (68ms)  : 67, 70

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

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (1,055ms)  : 1019, 1091
    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 (7744) - mean (107ms)  : 104, 111
    master - mean (107ms)  : 104, 109

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

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (748ms)  : 727, 770
    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 (7744) - mean (95ms)  : 93, 97
    master - mean (94ms)  : 91, 97

    section Bailout
    This PR (7744) - mean (95ms)  : 94, 97
    master - mean (95ms)  : 94, 96

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (704ms)  : 683, 726
    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 (7744) - mean (93ms)  : 90, 95
    master - mean (93ms)  : 91, 95

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

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (662ms)  : 644, 681
    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 (7744) - mean (193ms)  : 189, 198
    master - mean (193ms)  : 189, 197

    section Bailout
    This PR (7744) - mean (196ms)  : 194, 198
    master - mean (196ms)  : 193, 198

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (1,167ms)  : 1121, 1213
    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 (7744) - mean (276ms)  : 269, 283
    master - mean (278ms)  : 272, 283

    section Bailout
    This PR (7744) - mean (276ms)  : 273, 279
    master - mean (278ms)  : 272, 284

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (941ms)  : 900, 982
    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 (7744) - mean (270ms)  : 265, 274
    master - mean (270ms)  : 265, 276

    section Bailout
    This PR (7744) - mean (274ms)  : 266, 281
    master - mean (270ms)  : 266, 273

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (929ms)  : 882, 976
    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 (7744) - mean (269ms)  : 262, 277
    master - mean (268ms)  : 264, 273

    section Bailout
    This PR (7744) - mean (272ms)  : 262, 282
    master - mean (268ms)  : 265, 272

    section CallTarget+Inlining+NGEN
    This PR (7744) - mean (849ms)  : 832, 866
    master - mean (858ms)  : 839, 876

Loading

@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from 8a3aee6 to 753da8d Compare October 31, 2025 18:04
@andrewlock andrewlock requested review from a team as code owners October 31, 2025 18:04
@andrewlock andrewlock requested review from anna-git and removed request for a team October 31, 2025 18:04
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from 1b1f494 to f94e51b Compare October 31, 2025 18:04
@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from 753da8d to 3a96423 Compare November 3, 2025 17:30
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from f94e51b to 75937f5 Compare November 3, 2025 17:30
@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from 3a96423 to f01f8c6 Compare November 4, 2025 09:26
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from 75937f5 to 8111379 Compare November 4, 2025 09:26
@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from f01f8c6 to 4fd8303 Compare November 4, 2025 10:30
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from 8111379 to 177c2a0 Compare November 4, 2025 10:30
@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from 4fd8303 to 3ef006d Compare November 4, 2025 15:36
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from 177c2a0 to 83efef1 Compare November 4, 2025 15:36
@pr-commenter
Copy link

pr-commenter bot commented Nov 4, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7744 compared to master:

  • 1 benchmarks are slower, with geometric mean 2.097
  • 9 benchmarks have fewer allocations
  • 3 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
#7744 StartStopWithChild net6.0 10.6μs 59.6ns 372ns 0 0 0 5.49 KB
#7744 StartStopWithChild netcoreapp3.1 14.1μs 54.8ns 212ns 0 0 0 5.71 KB
#7744 StartStopWithChild net472 22.2μs 120ns 634ns 1 0.402 0.1 5.99 KB
Benchmarks.Trace.AgentWriterBenchmark - Unknown 🤷 Fewer allocations 🎉

Fewer allocations 🎉 in #7744

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 2.71 KB 0 b -2.71 KB -100.00%
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 2.7 KB 0 b -2.7 KB -100.00%
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 3.31 KB 0 b -3.31 KB -100.00%

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
#7744 WriteAndFlushEnrichedTraces net6.0 N/A N/A N/A NaN NaN NaN 0 b
#7744 WriteAndFlushEnrichedTraces netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
#7744 WriteAndFlushEnrichedTraces net472 N/A N/A N/A NaN NaN NaN 0 b
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
#7744 AllCycleSimpleBody net6.0 1.12μs 6.14ns 35.8ns 0 0 0 1.22 KB
#7744 AllCycleSimpleBody netcoreapp3.1 1.45μs 8ns 48ns 0 0 0 1.2 KB
#7744 AllCycleSimpleBody net472 1.01μs 0.588ns 2.2ns 0.192 0 0 1.23 KB
#7744 AllCycleMoreComplexBody net6.0 7.17μs 10.3ns 40ns 0 0 0 4.72 KB
#7744 AllCycleMoreComplexBody netcoreapp3.1 9.31μs 35.2ns 136ns 0 0 0 4.62 KB
#7744 AllCycleMoreComplexBody net472 7.69μs 3.73ns 14.5ns 0.73 0 0 4.74 KB
#7744 ObjectExtractorSimpleBody net6.0 324ns 1.6ns 6.4ns 0 0 0 280 B
#7744 ObjectExtractorSimpleBody netcoreapp3.1 409ns 1.99ns 8.45ns 0 0 0 272 B
#7744 ObjectExtractorSimpleBody net472 302ns 0.0364ns 0.141ns 0.0443 0 0 281 B
#7744 ObjectExtractorMoreComplexBody net6.0 6.36μs 29.8ns 111ns 0 0 0 3.78 KB
#7744 ObjectExtractorMoreComplexBody netcoreapp3.1 7.77μs 27.5ns 103ns 0 0 0 3.69 KB
#7744 ObjectExtractorMoreComplexBody net472 6.79μs 11.3ns 43.7ns 0.58 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
#7744 EncodeArgs net6.0 77.8μs 252ns 976ns 0 0 0 32.4 KB
#7744 EncodeArgs netcoreapp3.1 98μs 207ns 775ns 0 0 0 32.4 KB
#7744 EncodeArgs net472 110μs 62.2ns 241ns 4.95 0 0 32.51 KB
#7744 EncodeLegacyArgs net6.0 142μs 16.7ns 64.6ns 0 0 0 2.15 KB
#7744 EncodeLegacyArgs netcoreapp3.1 197μs 70.9ns 265ns 0 0 0 2.15 KB
#7744 EncodeLegacyArgs net472 260μs 24.9ns 96.3ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7744

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmark‑netcoreapp3.1 2.097 410,594.48 860,853.44

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
#7744 RunWafRealisticBenchmark net6.0 391μs 101ns 390ns 0 0 0 4.55 KB
#7744 RunWafRealisticBenchmark netcoreapp3.1 812μs 13μs 130μs 0 0 0 4.48 KB
#7744 RunWafRealisticBenchmark net472 426μs 65.9ns 255ns 0 0 0 4.66 KB
#7744 RunWafRealisticBenchmarkWithAttack net6.0 285μs 67.7ns 244ns 0 0 0 2.24 KB
#7744 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 297μs 375ns 1.4μs 0 0 0 2.22 KB
#7744 RunWafRealisticBenchmarkWithAttack net472 309μs 21.4ns 83ns 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
#7744 SendRequest net6.0 60.7μs 74.6ns 279ns 0 0 0 14.52 KB
#7744 SendRequest netcoreapp3.1 70.6μs 106ns 396ns 0 0 0 17.42 KB
#7744 SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7744

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net472 0 b 73 B 73 B
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net472 0 b 47 B 47 B

Fewer allocations 🎉 in #7744

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net6.0 3 B 2 B -1 B -33.33%
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net6.0 7 B 4 B -3 B -42.86%
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
#7744 OriginalCharSlice net6.0 1.94ms 512ns 1.91μs 0 0 0 640 KB
#7744 OriginalCharSlice netcoreapp3.1 2.18ms 11.5μs 57.3μs 0 0 0 640 KB
#7744 OriginalCharSlice net472 2.69ms 235ns 878ns 100 0 0 641.95 KB
#7744 OptimizedCharSlice net6.0 1.37ms 270ns 1.05μs 0 0 0 4 B
#7744 OptimizedCharSlice netcoreapp3.1 1.67ms 464ns 1.73μs 0 0 0 1 B
#7744 OptimizedCharSlice net472 2.04ms 329ns 1.27μs 0 0 0 73 B
#7744 OptimizedCharSliceWithPool net6.0 803μs 31.3ns 117ns 0 0 0 2 B
#7744 OptimizedCharSliceWithPool netcoreapp3.1 797μs 98.8ns 383ns 0 0 0 0 b
#7744 OptimizedCharSliceWithPool net472 1.15ms 76.5ns 286ns 0 0 0 47 B
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7744

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 56.49 KB 55.6 KB -894 B -1.58%

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
#7744 WriteAndFlushEnrichedTraces net6.0 665μs 1.73μs 6.7μs 0 0 0 41.61 KB
#7744 WriteAndFlushEnrichedTraces netcoreapp3.1 679μs 1.01μs 3.49μs 0 0 0 41.85 KB
#7744 WriteAndFlushEnrichedTraces net472 910μs 2.15μs 8.31μs 4.81 0 0 55.6 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
#7744 ExecuteNonQuery net6.0 1.93μs 5.72ns 22.2ns 0 0 0 1.02 KB
#7744 ExecuteNonQuery netcoreapp3.1 2.64μs 7.14ns 25.7ns 0 0 0 1.02 KB
#7744 ExecuteNonQuery net472 2.86μs 4.66ns 18.1ns 0.143 0.0143 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
#7744 CallElasticsearch net6.0 1.79μs 8.46ns 31.6ns 0 0 0 1.03 KB
#7744 CallElasticsearch netcoreapp3.1 2.37μs 6.15ns 23.8ns 0 0 0 1.03 KB
#7744 CallElasticsearch net472 3.62μs 3.25ns 12.2ns 0.162 0 0 1.04 KB
#7744 CallElasticsearchAsync net6.0 1.82μs 7.66ns 29.7ns 0 0 0 1.01 KB
#7744 CallElasticsearchAsync netcoreapp3.1 2.37μs 8.7ns 33.7ns 0 0 0 1.08 KB
#7744 CallElasticsearchAsync net472 3.83μs 1.97ns 7.63ns 0.173 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
#7744 ExecuteAsync net6.0 1.88μs 0.965ns 3.74ns 0 0 0 952 B
#7744 ExecuteAsync netcoreapp3.1 2.5μs 5.74ns 22.2ns 0 0 0 952 B
#7744 ExecuteAsync net472 2.65μs 2.69ns 10.4ns 0.144 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
#7744 SendAsync net6.0 6.84μs 17.9ns 69.4ns 0 0 0 2.36 KB
#7744 SendAsync netcoreapp3.1 8.73μs 27.4ns 106ns 0 0 0 2.9 KB
#7744 SendAsync net472 12.3μs 7.72ns 28.9ns 0.487 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7744

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 255.14 KB 257.53 KB 2.39 KB 0.94%

Fewer allocations 🎉 in #7744

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 278.42 KB 274.61 KB -3.82 KB -1.37%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 45.5 KB 42.76 KB -2.74 KB -6.03%

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
#7744 StringConcatBenchmark net6.0 43μs 235ns 1.96μs 0 0 0 43.78 KB
#7744 StringConcatBenchmark netcoreapp3.1 48.6μs 382ns 3.5μs 0 0 0 42.76 KB
#7744 StringConcatBenchmark net472 57.2μs 265ns 1.06μs 0 0 0 65.54 KB
#7744 StringConcatAspectBenchmark net6.0 479μs 2.24μs 8.38μs 0 0 0 274.61 KB
#7744 StringConcatAspectBenchmark netcoreapp3.1 520μs 2.39μs 8.62μs 0 0 0 257.53 KB
#7744 StringConcatAspectBenchmark net472 407μs 2.34μs 19.2μs 0 0 0 278.53 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
#7744 EnrichedLog net6.0 2.67μs 13ns 58.3ns 0 0 0 1.7 KB
#7744 EnrichedLog netcoreapp3.1 3.61μs 17.7ns 72.8ns 0 0 0 1.7 KB
#7744 EnrichedLog net472 3.79μs 8.68ns 33.6ns 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
#7744 EnrichedLog net6.0 127μs 738ns 6.26μs 0 0 0 4.31 KB
#7744 EnrichedLog netcoreapp3.1 129μs 413ns 1.6μs 0 0 0 4.31 KB
#7744 EnrichedLog net472 168μs 198ns 767ns 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
#7744 EnrichedLog net6.0 5.06μs 2.51ns 9.39ns 0 0 0 2.26 KB
#7744 EnrichedLog netcoreapp3.1 7.05μs 27.1ns 105ns 0 0 0 2.26 KB
#7744 EnrichedLog net472 7.36μs 4.48ns 17.4ns 0.33 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
#7744 SendReceive net6.0 1.98μs 9.81ns 40.5ns 0 0 0 1.2 KB
#7744 SendReceive netcoreapp3.1 2.76μs 9.96ns 38.6ns 0 0 0 1.2 KB
#7744 SendReceive net472 3.05μs 4.55ns 17.6ns 0.183 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
#7744 EnrichedLog net6.0 4.36μs 15ns 58.3ns 0 0 0 1.58 KB
#7744 EnrichedLog netcoreapp3.1 5.79μs 13.6ns 52.8ns 0 0 0 1.63 KB
#7744 EnrichedLog net472 6.63μs 7.39ns 28.6ns 0.299 0 0 2.03 KB
Benchmarks.Trace.SpanBenchmark - Same speed ✔️ Same allocations ✔️

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
#7744 StartFinishSpan net6.0 803ns 4.47ns 23.2ns 0 0 0 576 B
#7744 StartFinishSpan netcoreapp3.1 1.04μs 5.43ns 27.7ns 0 0 0 576 B
#7744 StartFinishSpan net472 924ns 0.523ns 2.03ns 0.0885 0 0 578 B
#7744 StartFinishScope net6.0 953ns 1.81ns 6.76ns 0 0 0 696 B
#7744 StartFinishScope netcoreapp3.1 1.25μs 5.98ns 25.4ns 0 0 0 696 B
#7744 StartFinishScope net472 1.13μs 0.864ns 3.11ns 0.102 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
#7744 RunOnMethodBegin net6.0 1.09μs 0.722ns 2.8ns 0 0 0 696 B
#7744 RunOnMethodBegin netcoreapp3.1 1.42μs 7.34ns 35.9ns 0 0 0 696 B
#7744 RunOnMethodBegin net472 1.48μs 1.31ns 5.06ns 0.104 0 0 658 B

@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from 3ef006d to e5c8a18 Compare November 5, 2025 08:10
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from 83efef1 to 40cc2d6 Compare November 5, 2025 08:10
@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from e5c8a18 to 75e54ce Compare November 5, 2025 11:55
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from 40cc2d6 to d08d676 Compare November 5, 2025 11:55
@andrewlock andrewlock force-pushed the andrew/settings/6a-stop-using-tracer-instance branch from 75e54ce to 6027e13 Compare November 5, 2025 13:40
@andrewlock andrewlock force-pushed the andrew/settings/5-remove-mutablesettings branch from d08d676 to 85a6731 Compare November 5, 2025 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:data-streams-monitoring area:tests unit tests, integration tests area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) type:reliability

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants