Skip to content

Obfuscate query strings in WCF http.url tag#8643

Draft
bouwkast wants to merge 1 commit into
masterfrom
steven/wcf-http-url-fix
Draft

Obfuscate query strings in WCF http.url tag#8643
bouwkast wants to merge 1 commit into
masterfrom
steven/wcf-http-url-fix

Conversation

@bouwkast
Copy link
Copy Markdown
Collaborator

@bouwkast bouwkast commented May 14, 2026

Summary of changes

Obfuscate query strings in the http.url tag for WCF spans, matching the behavior of other HTTP integrations.

Reason for change

We do this in other HTTP integrations, but was missed for WCF

Implementation details

Added WcfCommon.BuildHttpUrl to route the WCF request URI through HttpRequestUtils.GetUrl so they get obfuscated like other HTTP intstrumentations.

Note: Only http/https URIs go through the obfuscator. Other WCF transports (net.tcp, net.pipe, net.msmq, etc.) fall back to uri.AbsoluteUri since GetUrl expects a scheme://host/path shape.

Test coverage

Updated sample app and snapshots as we didn't have any tests that used query strings.

Other details

Is this a breaking change? It is a bug, but I guess we are changing tags.
The snapshots look noisy but the only real change / addition here should be this method public double ServerSyncAddJsonQuery(string n1, string n2, string apiKey) => GetResult(n1, n2); I think it is just because of the sorting that it looks like more stuff changed.

@bouwkast bouwkast added type:bug AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos identified-by:ai labels May 14, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Snapshots difference summary

The following differences have been observed in committed snapshots. It is meant to help the reviewer.
The diff is simplistic, so please check some files anyway while we improve it.

4 occurrences of :

-    Resource: ServerSyncAddWrapped,
+    Resource: ServerSyncAddJsonQuery,

4 occurrences of :

-    Resource: POST localhost:00000/ServerSyncAddWrapped,
+    Resource: GET localhost:00000/ServerSyncAddJsonQuery/?,
[...]
-      http.method: POST,
+      http.method: GET,
[...]
-      http.url: http://localhost:00000/ServerSyncAddWrapped,
+      http.url: http://localhost:00000/ServerSyncAddJsonQuery/1?n2=2&<redacted>,

2 occurrences of :

-    Resource: /ServerSyncAddWrapped,
+    Resource: /ServerSyncAddJsonQuery/?,

4 occurrences of :

-      http.method: POST,
+      http.method: GET,
[...]
-      http.url: http://localhost:00000/ServerSyncAddWrapped,
+      http.url: http://localhost:00000/ServerSyncAddJsonQuery/1?n2=2&<redacted>,

4 occurrences of :

-    Name: ServerSyncAddWrapped,
-    Resource: ServerSyncAddWrapped,
+    Name: ServerSyncAddJsonQuery,
+    Resource: ServerSyncAddJsonQuery,

4 occurrences of :

-    Resource: ServerSyncAddXml,
+    Resource: ServerSyncAddWrapped,

4 occurrences of :

-    Resource: GET localhost:00000/ServerSyncAddXml/?/n2=2,
+    Resource: POST localhost:00000/ServerSyncAddWrapped,
[...]
-      http.method: GET,
+      http.method: POST,
[...]
-      http.url: http://localhost:00000/ServerSyncAddXml/1/n2=2,
+      http.url: http://localhost:00000/ServerSyncAddWrapped,

2 occurrences of :

-    Resource: /ServerSyncAddXml/?/n2=2,
+    Resource: /ServerSyncAddWrapped,

4 occurrences of :

-      http.method: GET,
+      http.method: POST,
[...]
-      http.url: http://localhost:00000/ServerSyncAddXml/1/n2=2,
+      http.url: http://localhost:00000/ServerSyncAddWrapped,

4 occurrences of :

-    Name: ServerSyncAddXml,
-    Resource: ServerSyncAddXml,
+    Name: ServerSyncAddWrapped,
+    Resource: ServerSyncAddWrapped,

4 occurrences of :

-    Resource: ServerTaskAddPost,
+    Resource: ServerSyncAddXml,

4 occurrences of :

-    Resource: POST localhost:00000/ServerTaskAddPost,
+    Resource: GET localhost:00000/ServerSyncAddXml/?/n2=2,
[...]
-      http.method: POST,
+      http.method: GET,
[...]
-      http.url: http://localhost:00000/ServerTaskAddPost,
+      http.url: http://localhost:00000/ServerSyncAddXml/1/n2=2,

2 occurrences of :

-    Resource: /ServerTaskAddPost,
+    Resource: /ServerSyncAddXml/?/n2=2,

4 occurrences of :

-      http.method: POST,
+      http.method: GET,
[...]
-      http.url: http://localhost:00000/ServerTaskAddPost,
+      http.url: http://localhost:00000/ServerSyncAddXml/1/n2=2,

1 occurrences of :

+    Name: ServerSyncAddXml,
+    Resource: ServerSyncAddXml,
+    Service: Samples.Wcf,
+    ParentId: Id_19,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      version: 1.0.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_22,
+    Name: internal,
+    Resource: ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: custom,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      otel.library.name: Samples.Wcf,
+      otel.status_code: STATUS_CODE_UNSET,
+      otel.trace_id: Guid_6,
+      runtime-id: Guid_2,
+      span.kind: internal,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_23,
+    Name: http.request,
+    Resource: POST localhost:00000/ServerTaskAddPost,
+    Service: Samples.Wcf-http-client,
+    Type: http,
+    ParentId: Id_22,
+    Tags: {
+      component: WebRequest,
+      env: integration_tests,
+      http.method: POST,
+      http.status_code: 200,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      out.host: localhost,
+      runtime-id: Guid_2,
+      span.kind: client,
+      _dd.base_service: Samples.Wcf,
+      _dd.svc_src: http-client
+    },
+    Metrics: {
+      _dd.top_level: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_24,
+    Name: wcf.request,
+    Resource: /ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: web,
+    ParentId: Id_23,
+    Tags: {
+      component: Wcf,
+      custom-tag: DispatchMessageInspector,
+      env: integration_tests,
+      http.method: POST,
+      http.request.headers.host: localhost:00000,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      runtime-id: Guid_2,
+      span.kind: server,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_25,
[...]
-    ParentId: Id_19,
+    ParentId: Id_24,

2 occurrences of :

-    Resource: POST /ServerSyncAddWrapped,
+    Resource: GET /ServerSyncAddJsonQuery/{n1}?n2={n2}&api_key={apiKey},

2 occurrences of :

-    Resource: GET /ServerSyncAddXml/{n1}/n2={n2},
+    Resource: POST /ServerSyncAddWrapped,

2 occurrences of :

-    Resource: POST /ServerTaskAddPost,
+    Resource: GET /ServerSyncAddXml/{n1}/n2={n2},

1 occurrences of :

+    Name: ServerSyncAddXml,
+    Resource: ServerSyncAddXml,
+    Service: Samples.Wcf,
+    ParentId: Id_19,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      version: 1.0.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_22,
+    Name: internal,
+    Resource: ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: custom,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      otel.library.name: Samples.Wcf,
+      otel.status_code: STATUS_CODE_UNSET,
+      otel.trace_id: Guid_6,
+      runtime-id: Guid_2,
+      span.kind: internal,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_23,
+    Name: http.request,
+    Resource: POST localhost:00000/ServerTaskAddPost,
+    Service: Samples.Wcf-http-client,
+    Type: http,
+    ParentId: Id_22,
+    Tags: {
+      component: WebRequest,
+      env: integration_tests,
+      http.method: POST,
+      http.status_code: 200,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      out.host: localhost,
+      runtime-id: Guid_2,
+      span.kind: client,
+      _dd.base_service: Samples.Wcf,
+      _dd.svc_src: http-client
+    },
+    Metrics: {
+      _dd.top_level: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_24,
+    Name: wcf.request,
+    Resource: POST /ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: web,
+    ParentId: Id_23,
+    Tags: {
+      component: Wcf,
+      custom-tag: DispatchMessageInspector,
+      env: integration_tests,
+      http.method: POST,
+      http.request.headers.host: localhost:00000,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      runtime-id: Guid_2,
+      span.kind: server,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_25,
[...]
-    ParentId: Id_19,
+    ParentId: Id_24,

1 occurrences of :

+    Name: ServerSyncAddXml,
+    Resource: ServerSyncAddXml,
+    Service: Samples.Wcf,
+    ParentId: Id_19,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      version: 1.0.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_22,
+    Name: internal,
+    Resource: ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: custom,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      otel.library.name: Samples.Wcf,
+      otel.status_code: STATUS_CODE_UNSET,
+      otel.trace_id: Guid_6,
+      runtime-id: Guid_2,
+      span.kind: internal,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_23,
+    Name: http.client.request,
+    Resource: POST localhost:00000/ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: http,
+    ParentId: Id_22,
+    Tags: {
+      component: WebRequest,
+      env: integration_tests,
+      http.method: POST,
+      http.status_code: 200,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      out.host: localhost,
+      peer.service: localhost,
+      span.kind: client,
+      version: 1.0.0,
+      _dd.peer.service.source: out.host
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_24,
+    Name: http.server.request,
+    Resource: /ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: web,
+    ParentId: Id_23,
+    Tags: {
+      component: Wcf,
+      custom-tag: DispatchMessageInspector,
+      env: integration_tests,
+      http.method: POST,
+      http.request.headers.host: localhost:00000,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      runtime-id: Guid_2,
+      span.kind: server,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_25,
[...]
-    ParentId: Id_19,
+    ParentId: Id_24,

1 occurrences of :

+    Name: ServerSyncAddXml,
+    Resource: ServerSyncAddXml,
+    Service: Samples.Wcf,
+    ParentId: Id_19,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      version: 1.0.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_22,
+    Name: internal,
+    Resource: ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: custom,
+    Tags: {
+      env: integration_tests,
+      language: dotnet,
+      otel.library.name: Samples.Wcf,
+      otel.status_code: STATUS_CODE_UNSET,
+      otel.trace_id: Guid_6,
+      runtime-id: Guid_2,
+      span.kind: internal,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_23,
+    Name: http.client.request,
+    Resource: POST localhost:00000/ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: http,
+    ParentId: Id_22,
+    Tags: {
+      component: WebRequest,
+      env: integration_tests,
+      http.method: POST,
+      http.status_code: 200,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      out.host: localhost,
+      peer.service: localhost,
+      span.kind: client,
+      version: 1.0.0,
+      _dd.peer.service.source: out.host
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_24,
+    Name: http.server.request,
+    Resource: POST /ServerTaskAddPost,
+    Service: Samples.Wcf,
+    Type: web,
+    ParentId: Id_23,
+    Tags: {
+      component: Wcf,
+      custom-tag: DispatchMessageInspector,
+      env: integration_tests,
+      http.method: POST,
+      http.request.headers.host: localhost:00000,
+      http.url: http://localhost:00000/ServerTaskAddPost,
+      language: dotnet,
+      runtime-id: Guid_2,
+      span.kind: server,
+      version: 1.0.0
+    },
+    Metrics: {
+      process_id: 0,
+      _dd.top_level: 1.0,
+      _dd.tracer_kr: 1.0,
+      _sampling_priority_v1: 1.0
+    }
+  },
+  {
+    TraceId: Id_21,
+    SpanId: Id_25,
[...]
-    ParentId: Id_19,
+    ParentId: Id_24,

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

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (8643) 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
duration72.53 ± (72.45 - 72.83) ms72.94 ± (72.99 - 73.32) ms+0.6%✅⬆️
.NET Framework 4.8 - Bailout
duration78.88 ± (78.69 - 79.22) ms79.33 ± (78.98 - 79.48) ms+0.6%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1101.30 ± (1100.83 - 1107.78) ms1105.28 ± (1104.53 - 1111.42) ms+0.4%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms22.39 ± (22.35 - 22.43) ms22.75 ± (22.69 - 22.81) ms+1.6%✅⬆️
process.time_to_main_ms83.82 ± (83.63 - 84.01) ms86.95 ± (86.65 - 87.24) ms+3.7%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.92 ± (10.92 - 10.92) MB10.93 ± (10.92 - 10.93) MB+0.1%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.80 ± (22.75 - 22.85) ms22.52 ± (22.46 - 22.57) ms-1.2%
process.time_to_main_ms88.38 ± (88.08 - 88.68) ms86.73 ± (86.52 - 86.94) ms-1.9%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.88 ± (10.88 - 10.88) MB10.96 ± (10.96 - 10.96) MB+0.7%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms212.71 ± (211.77 - 213.65) ms214.18 ± (213.27 - 215.10) ms+0.7%✅⬆️
process.time_to_main_ms537.00 ± (535.72 - 538.28) ms538.78 ± (537.36 - 540.19) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.41 ± (48.38 - 48.43) MB48.30 ± (48.27 - 48.34) MB-0.2%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)-0.2%
.NET 6 - Baseline
process.internal_duration_ms21.37 ± (21.33 - 21.41) ms21.29 ± (21.25 - 21.34) ms-0.4%
process.time_to_main_ms74.28 ± (74.03 - 74.53) ms73.37 ± (73.21 - 73.52) ms-1.2%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.63 ± (10.63 - 10.64) MB10.62 ± (10.62 - 10.63) MB-0.1%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.60 ± (21.55 - 21.66) ms21.16 ± (21.12 - 21.19) ms-2.1%
process.time_to_main_ms77.44 ± (77.19 - 77.69) ms74.23 ± (74.06 - 74.39) ms-4.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.75 ± (10.75 - 10.75) MB10.74 ± (10.74 - 10.75) MB-0.1%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms375.86 ± (373.58 - 378.13) ms376.20 ± (374.02 - 378.38) ms+0.1%✅⬆️
process.time_to_main_ms539.08 ± (537.82 - 540.34) ms538.49 ± (537.27 - 539.71) ms-0.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed49.79 ± (49.77 - 49.81) MB49.89 ± (49.86 - 49.91) MB+0.2%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.6%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms19.35 ± (19.32 - 19.38) ms19.65 ± (19.59 - 19.71) ms+1.6%✅⬆️
process.time_to_main_ms72.06 ± (71.88 - 72.25) ms74.68 ± (74.41 - 74.94) ms+3.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.69 ± (7.68 - 7.69) MB7.67 ± (7.66 - 7.67) MB-0.2%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.70 ± (19.66 - 19.75) ms19.44 ± (19.39 - 19.48) ms-1.4%
process.time_to_main_ms75.27 ± (75.03 - 75.51) ms73.98 ± (73.82 - 74.15) ms-1.7%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.74 ± (7.73 - 7.74) MB7.72 ± (7.71 - 7.72) MB-0.3%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms291.88 ± (289.76 - 294.00) ms297.63 ± (295.82 - 299.45) ms+2.0%✅⬆️
process.time_to_main_ms497.89 ± (496.73 - 499.05) ms498.21 ± (496.99 - 499.43) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.94 ± (36.92 - 36.97) MB36.97 ± (36.94 - 36.99) MB+0.1%✅⬆️
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)+0.0%✅⬆️

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration201.46 ± (201.24 - 202.33) ms198.33 ± (197.99 - 199.06) ms-1.6%
.NET Framework 4.8 - Bailout
duration205.63 ± (205.01 - 206.04) ms202.29 ± (201.78 - 202.82) ms-1.6%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1202.91 ± (1202.06 - 1208.42) ms1198.28 ± (1197.26 - 1203.92) ms-0.4%
.NET Core 3.1 - Baseline
process.internal_duration_ms195.59 ± (195.03 - 196.15) ms194.17 ± (193.64 - 194.70) ms-0.7%
process.time_to_main_ms84.19 ± (83.85 - 84.52) ms83.69 ± (83.30 - 84.08) ms-0.6%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.02 ± (16.00 - 16.05) MB16.06 ± (16.03 - 16.09) MB+0.2%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)-0.5%
.NET Core 3.1 - Bailout
process.internal_duration_ms195.01 ± (194.55 - 195.46) ms191.63 ± (191.15 - 192.10) ms-1.7%
process.time_to_main_ms85.60 ± (85.30 - 85.89) ms84.24 ± (83.97 - 84.50) ms-1.6%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.10 ± (16.07 - 16.13) MB16.09 ± (16.06 - 16.12) MB-0.0%
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+0.2%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms389.46 ± (388.19 - 390.72) ms389.70 ± (388.49 - 390.91) ms+0.1%✅⬆️
process.time_to_main_ms535.18 ± (533.98 - 536.38) ms536.89 ± (535.80 - 537.98) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.40 ± (58.18 - 58.63) MB58.27 ± (58.02 - 58.51) MB-0.2%
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)-0.0%
.NET 6 - Baseline
process.internal_duration_ms199.67 ± (199.17 - 200.16) ms198.19 ± (197.76 - 198.63) ms-0.7%
process.time_to_main_ms72.88 ± (72.56 - 73.20) ms72.63 ± (72.39 - 72.88) ms-0.3%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.29 ± (16.27 - 16.32) MB16.33 ± (16.31 - 16.36) MB+0.3%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.3%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms198.40 ± (198.01 - 198.80) ms197.67 ± (197.18 - 198.16) ms-0.4%
process.time_to_main_ms73.38 ± (73.19 - 73.56) ms73.47 ± (73.26 - 73.67) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.33 ± (16.30 - 16.36) MB16.41 ± (16.39 - 16.43) MB+0.5%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)-1.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms597.80 ± (595.34 - 600.25) ms593.35 ± (590.90 - 595.79) ms-0.7%
process.time_to_main_ms537.07 ± (536.12 - 538.03) ms534.79 ± (533.84 - 535.75) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed61.54 ± (61.45 - 61.63) MB61.44 ± (61.33 - 61.55) MB-0.2%
runtime.dotnet.threads.count31 ± (31 - 31)31 ± (31 - 31)+0.4%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms198.21 ± (197.75 - 198.68) ms197.62 ± (197.11 - 198.13) ms-0.3%
process.time_to_main_ms72.57 ± (72.31 - 72.83) ms72.39 ± (72.16 - 72.63) ms-0.2%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.67 ± (11.65 - 11.68) MB11.67 ± (11.66 - 11.69) MB+0.1%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.3%
.NET 8 - Bailout
process.internal_duration_ms197.65 ± (197.19 - 198.11) ms196.34 ± (195.89 - 196.78) ms-0.7%
process.time_to_main_ms73.76 ± (73.49 - 74.03) ms73.20 ± (72.99 - 73.41) ms-0.8%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.69 ± (11.67 - 11.71) MB11.79 ± (11.77 - 11.81) MB+0.8%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-0.1%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms516.56 ± (513.81 - 519.31) ms516.24 ± (513.71 - 518.76) ms-0.1%
process.time_to_main_ms493.60 ± (492.87 - 494.33) ms495.63 ± (494.72 - 496.55) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed50.59 ± (50.55 - 50.63) MB50.66 ± (50.62 - 50.70) MB+0.1%✅⬆️
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)-0.0%
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 (8643) - mean (73ms)  : 71, 76
    master - mean (73ms)  : 70, 75

    section Bailout
    This PR (8643) - mean (79ms)  : 76, 83
    master - mean (79ms)  : 75, 83

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (1,108ms)  : 1058, 1158
    master - mean (1,104ms)  : 1056, 1153

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 (8643) - mean (117ms)  : 111, 123
    master - mean (113ms)  : 109, 117

    section Bailout
    This PR (8643) - mean (116ms)  : 112, 121
    master - mean (118ms)  : 113, 124

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (790ms)  : 763, 818
    master - mean (787ms)  : 759, 814

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8643) - mean (101ms)  : 98, 104
    master - mean (102ms)  : 98, 106

    section Bailout
    This PR (8643) - mean (102ms)  : 99, 104
    master - mean (106ms)  : 100, 111

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (943ms)  : 900, 986
    master - mean (946ms)  : 907, 986

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8643) - mean (102ms)  : 98, 107
    master - mean (99ms)  : 95, 103

    section Bailout
    This PR (8643) - mean (101ms)  : 98, 104
    master - mean (103ms)  : 98, 108

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (826ms)  : 796, 855
    master - mean (822ms)  : 788, 856

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 (8643) - mean (199ms)  : 192, 205
    master - mean (202ms)  : 194, 210

    section Bailout
    This PR (8643) - mean (202ms)  : 196, 208
    master - mean (206ms)  : 198, 213

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (1,201ms)  : 1153, 1248
    master - mean (1,205ms)  : 1159, 1251

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 (8643) - mean (286ms)  : 279, 294
    master - mean (288ms)  : 281, 295

    section Bailout
    This PR (8643) - mean (285ms)  : 279, 291
    master - mean (290ms)  : 283, 296

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (965ms)  : 943, 986
    master - mean (967ms)  : 941, 992

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8643) - mean (280ms)  : 274, 286
    master - mean (281ms)  : 275, 287

    section Bailout
    This PR (8643) - mean (279ms)  : 269, 289
    master - mean (280ms)  : 275, 285

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (1,159ms)  : 1124, 1194
    master - mean (1,163ms)  : 1117, 1208

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (8643) - mean (280ms)  : 272, 288
    master - mean (281ms)  : 274, 289

    section Bailout
    This PR (8643) - mean (279ms)  : 274, 285
    master - mean (282ms)  : 275, 288

    section CallTarget+Inlining+NGEN
    This PR (8643) - mean (1,043ms)  : 1002, 1083
    master - mean (1,041ms)  : 997, 1085

Loading

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos identified-by:ai type:bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant