Skip to content

Fix HotChocolate duck typing error#7930

Merged
NachoEchevarria merged 14 commits intomasterfrom
nacho/HotChocolateDuckTypingException
Dec 19, 2025
Merged

Fix HotChocolate duck typing error#7930
NachoEchevarria merged 14 commits intomasterfrom
nacho/HotChocolateDuckTypingException

Conversation

@NachoEchevarria
Copy link
Collaborator

@NachoEchevarria NachoEchevarria commented Dec 9, 2025

Summary of changes

Fixes a DuckTypePropertyOrFieldNotFoundException that occurs when HotChocolate GraphQL errors contain array index path segments instead of field name path segments.

Reason for change

We have seen the following error:

Error : Error creating GraphQL error SpanEvent.
Datadog.Trace.DuckTyping.DuckTypePropertyOrFieldNotFoundException
at Datadog.Trace.DuckTyping.DuckTypePropertyOrFieldNotFoundException.Throw(String name, String duckAttributeName, Type type)
at Datadog.Trace.DuckTyping.DuckType.CreatePropertiesFromStruct(TypeBuilder proxyTypeBuilder, Type proxyDefinitionType, Type targetType, FieldInfo instanceField)
at Datadog.Trace.DuckTyping.DuckType.CreateProxyType(Type proxyDefinitionType, Type targetType, Boolean dryRun)
at HotChocolate_Abstractions__.HotChocolate_Error.Datadog_Trace_ClrProfiler_AutoInstrumentation_GraphQL_HotChocolate_IError_44.get_Path()
at Datadog.Trace.ClrProfiler.AutoInstrumentation.GraphQL.HotChocolate.HotChocolateCommon.ConstructErrorEvents(List`1 executionErrors)

This error was detected in customer installations.

Implementation details

Root cause: HotChocolate's Path class is abstract with multiple implementations:

  • NamePathSegment - for field names (has a Name property)
  • IndexerPathSegment - for array indices (does NOT have a Name property)

The previous implementation used duck typing with PathStruct that expected a Name property, which failed when encountering IndexerPathSegment instances.

Solution:

  • Removed PathStruct duck type that assumed all path segments have a Name property
  • Created new IPath interface that duck types the ToList() method available on the abstract Path class
  • Changed IError.Path from PathStruct to IPath
  • Updated HotChocolateCommon.ConstructErrorEvents() to:
    1. Duck cast the path object to IPath
    2. Call ToList() to get all path segments (works for both NamePathSegment and IndexerPathSegment)
    3. Convert each segment to string for the span event attributes

This approach is more robust as it relies on the public API (ToList()) defined on the abstract class rather than assuming all
implementations share the same properties.

Test coverage

Added new test case ThrowExceptionIndex to the existing HotChocolate integration tests:

  • New GraphQL query that triggers an error with array index path segments
  • ErrorMiddleware modifies the error path to include ["books", 1] to create an IndexerPathSegment
  • Updated test snapshots across all schema versions to verify proper path serialization
  • Added regex scrubber for the new test method's stack traces

The test ensures errors with IndexerPathSegment paths are properly captured and serialized in span events without throwing duck typing exceptions.

Other details

@github-actions
Copy link
Contributor

github-actions bot commented Dec 9, 2025

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 :

+  {
+    TraceId: Id_12,
+    SpanId: Id_13,
+    Name: aspnet_core.request,
+    Resource: POST /graphql/{*slug},
+    Service: Samples.HotChocolate,
+    Type: web,
+    Tags: {
+      aspnet_core.endpoint: Hot Chocolate GraphQL Pipeline,
+      aspnet_core.route: /graphql/{**slug},
+      component: aspnet_core,
+      env: integration_tests,
+      http.method: POST,
+      http.request.headers.host: localhost:00000,
+      http.route: /graphql/{**slug},
+      http.status_code: 200,
+      http.url: http://localhost:00000/graphql,
+      http.useragent: testhelper,
+      language: dotnet,
+      runtime-id: Guid_1,
+      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
+    }
+  },
[...]
-    SpanId: Id_12,
+    SpanId: Id_14,

4 occurrences of :

-    SpanId: Id_13,
+    SpanId: Id_15,

4 occurrences of :

-    SpanId: Id_14,
+    SpanId: Id_16,

4 occurrences of :

-    SpanId: Id_15,
+    SpanId: Id_17,

2 occurrences of :

+      language: dotnet,
+      runtime-id: Guid_1,
+      span.kind: server,
+      _dd.base_service: Samples.HotChocolate
+    },
+    Metrics: {
+      _dd.top_level: 1.0
+    }
+  },
+  {
+    TraceId: Id_12,
+    SpanId: Id_18,
+    Name: graphql.execute,
+    Resource: Query ErrorQuery,
+    Service: Samples.HotChocolate-graphql,
+    Type: graphql,
+    ParentId: Id_13,
+    Error: 1,
+    Tags: {
+      component: HotChocolate,
+      env: integration_tests,
+      error.msg: 1 error(s),
+      error.stack:
[...]
+      error.type: HotChocolate.Error,
+      events: [{"name":"dd.graphql.query.error","time_unix_nano":<DateTimeOffset.Now>,"attributes":{"message":"Unexpected Execution Error","locations":["1:18"],"path":["throwExceptionIndex"],"stacktrace":"   at Samples.HotChocolate.Query.ThrowExceptionIndex() in Query.cs:line 00","extensions.int":1,"extensions.float":1.1,"extensions.str":"1","extensions.bool":true,"extensions.other":"[1,foo]","extensions.sbyte":-42,"extensions.byte":42,"extensions.short":-1000,"extensions.ushort":1000,"extensions.uint":4294967295,"extensions.long":-9223372036854775808,"extensions.ulong":"18446744073709551615","extensions.decimal":"3.14159265358979","extensions.double":3.141592653589793,"extensions.char":"A"}}],
+      graphql.operation.name: ErrorQuery,
+      graphql.operation.type: Query,
+      graphql.source:
[...]
+  throwExceptionIndex

2 occurrences of :

+      language: dotnet,
+      span.kind: server,
+      version: 1.0.0
+    }
+  },
+  {
+    TraceId: Id_12,
+    SpanId: Id_18,
+    Name: graphql.execute,
+    Resource: Query ErrorQuery,
+    Service: Samples.HotChocolate,
+    Type: graphql,
+    ParentId: Id_13,
+    Error: 1,
+    Tags: {
+      component: HotChocolate,
+      env: integration_tests,
+      error.msg: 1 error(s),
+      error.stack:
[...]
+      error.type: HotChocolate.Error,
+      events: [{"name":"dd.graphql.query.error","time_unix_nano":<DateTimeOffset.Now>,"attributes":{"message":"Unexpected Execution Error","locations":["1:18"],"path":["throwExceptionIndex"],"stacktrace":"   at Samples.HotChocolate.Query.ThrowExceptionIndex() in Query.cs:line 00","extensions.int":1,"extensions.float":1.1,"extensions.str":"1","extensions.bool":true,"extensions.other":"[1,foo]","extensions.sbyte":-42,"extensions.byte":42,"extensions.short":-1000,"extensions.ushort":1000,"extensions.uint":4294967295,"extensions.long":-9223372036854775808,"extensions.ulong":"18446744073709551615","extensions.decimal":"3.14159265358979","extensions.double":3.141592653589793,"extensions.char":"A"}}],
+      graphql.operation.name: ErrorQuery,
+      graphql.operation.type: Query,
+      graphql.source:
[...]
+  throwExceptionIndex

@pr-commenter
Copy link

pr-commenter bot commented Dec 9, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7930 compared to master:

  • 2 benchmarks are faster, with geometric mean 1.646
  • 2 benchmarks are slower, with geometric mean 1.250
  • 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 11μs 58.8ns 333ns 0 0 0 5.5 KB
master StartStopWithChild netcoreapp3.1 14.1μs 64.9ns 260ns 0 0 0 5.71 KB
master StartStopWithChild net472 22.2μs 115ns 599ns 0.987 0.329 0.11 5.97 KB
#7930 StartStopWithChild net6.0 10.7μs 59.4ns 380ns 0 0 0 5.5 KB
#7930 StartStopWithChild netcoreapp3.1 14.3μs 61.9ns 240ns 0 0 0 5.71 KB
#7930 StartStopWithChild net472 22μs 121ns 766ns 0.978 0.326 0.109 5.95 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 1.26ms 114ns 443ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.4ms 174ns 653ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.71ms 140ns 524ns 0 0 0 3.26 KB
#7930 WriteAndFlushEnrichedTraces net6.0 1.27ms 103ns 398ns 0 0 0 2.7 KB
#7930 WriteAndFlushEnrichedTraces netcoreapp3.1 1.37ms 285ns 1.07μs 0 0 0 2.7 KB
#7930 WriteAndFlushEnrichedTraces net472 1.69ms 739ns 2.86μs 0 0 0 3.26 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.09μs 6.35ns 56ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.39μs 7.97ns 56.9ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 1.04μs 0.972ns 3.5ns 0.192 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 7.39μs 11ns 42.7ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 9.01μs 46.6ns 237ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.67μs 1.79ns 6.69ns 0.726 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 334ns 0.159ns 0.593ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 399ns 2.24ns 14.2ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 299ns 0.0353ns 0.127ns 0.0438 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.5μs 1.27ns 4.92ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.84μs 37.5ns 155ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.74μs 1.59ns 5.74ns 0.573 0 0 3.8 KB
#7930 AllCycleSimpleBody net6.0 1.1μs 6.26ns 45.6ns 0 0 0 1.22 KB
#7930 AllCycleSimpleBody netcoreapp3.1 1.36μs 7.8ns 58.9ns 0 0 0 1.2 KB
#7930 AllCycleSimpleBody net472 1.01μs 0.579ns 2.17ns 0.194 0 0 1.23 KB
#7930 AllCycleMoreComplexBody net6.0 7.43μs 38.5ns 193ns 0 0 0 4.72 KB
#7930 AllCycleMoreComplexBody netcoreapp3.1 9.01μs 18.9ns 73.1ns 0 0 0 4.62 KB
#7930 AllCycleMoreComplexBody net472 7.65μs 5.12ns 19.8ns 0.729 0 0 4.74 KB
#7930 ObjectExtractorSimpleBody net6.0 331ns 1.85ns 11.8ns 0 0 0 280 B
#7930 ObjectExtractorSimpleBody netcoreapp3.1 396ns 1.95ns 7.81ns 0 0 0 272 B
#7930 ObjectExtractorSimpleBody net472 302ns 0.02ns 0.072ns 0.0441 0 0 281 B
#7930 ObjectExtractorMoreComplexBody net6.0 6.57μs 20.1ns 77.7ns 0 0 0 3.78 KB
#7930 ObjectExtractorMoreComplexBody netcoreapp3.1 7.96μs 39.2ns 171ns 0 0 0 3.69 KB
#7930 ObjectExtractorMoreComplexBody net472 6.71μs 6.3ns 24.4ns 0.57 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.1μs 104ns 390ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 97.2μs 374ns 1.45μs 0 0 0 32.4 KB
master EncodeArgs net472 108μs 9.38ns 35.1ns 4.88 0 0 32.5 KB
master EncodeLegacyArgs net6.0 147μs 9.23ns 33.3ns 0 0 0 2.14 KB
master EncodeLegacyArgs netcoreapp3.1 199μs 47ns 182ns 0 0 0 2.14 KB
master EncodeLegacyArgs net472 262μs 22.8ns 88.2ns 0 0 0 2.14 KB
#7930 EncodeArgs net6.0 76.1μs 64.4ns 241ns 0 0 0 32.4 KB
#7930 EncodeArgs netcoreapp3.1 97.9μs 323ns 1.25μs 0 0 0 32.4 KB
#7930 EncodeArgs net472 109μs 12.3ns 47.7ns 4.89 0 0 32.5 KB
#7930 EncodeLegacyArgs net6.0 144μs 73ns 283ns 0 0 0 2.14 KB
#7930 EncodeLegacyArgs netcoreapp3.1 198μs 101ns 392ns 0 0 0 2.14 KB
#7930 EncodeLegacyArgs net472 263μs 66.9ns 259ns 0 0 0 2.14 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 434μs 1.91μs 7.15μs 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 460μs 3.29μs 31.8μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 490μs 221ns 765ns 0 0 0 0 b
master RunWafRealisticBenchmarkWithAttack net6.0 308μs 1.21μs 4.36μs 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 341μs 3.11μs 29.8μs 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 368μs 542ns 1.95μs 0 0 0 0 b
#7930 RunWafRealisticBenchmark net6.0 414μs 854ns 3.19μs 0 0 0 4.55 KB
#7930 RunWafRealisticBenchmark netcoreapp3.1 464μs 3.11μs 30μs 0 0 0 4.48 KB
#7930 RunWafRealisticBenchmark net472 488μs 1μs 3.89μs 0 0 0 0 b
#7930 RunWafRealisticBenchmarkWithAttack net6.0 305μs 930ns 3.35μs 0 0 0 2.24 KB
#7930 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 318μs 1.36μs 4.89μs 0 0 0 2.22 KB
#7930 RunWafRealisticBenchmarkWithAttack net472 362μs 374ns 1.4μs 0 0 0 0 b
Benchmarks.Trace.AspNetCoreBenchmark - Unknown 🤷 More allocations ⚠️

More allocations ⚠️ in #7930

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.AspNetCoreBenchmark.SendRequest‑netcoreapp3.1 21.18 KB 21.32 KB 140 B 0.66%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendRequest net6.0 83.6μs 132ns 476ns 0 0 0 18.97 KB
master SendRequest netcoreapp3.1 96.6μs 416ns 2.94μs 0 0 0 21.18 KB
master SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
#7930 SendRequest net6.0 84.1μs 156ns 604ns 0 0 0 18.98 KB
#7930 SendRequest netcoreapp3.1 96.4μs 65.1ns 235ns 0 0 0 21.32 KB
#7930 SendRequest net472 0ns 0ns 0ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7930

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CharSliceBenchmark.OriginalCharSlice‑netcoreapp3.1 1.397 2,794,500.00 3,904,750.00

Faster 🎉 in #7930

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑netcoreapp3.1 2.319 1,890,300.00 815,000.00

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 2.02ms 494ns 1.85μs 0 0 0 640 KB
master OriginalCharSlice netcoreapp3.1 2.8ms 4.24μs 26.8μs 0 0 0 640 KB
master OriginalCharSlice net472 2.68ms 727ns 2.82μs 0 0 0 638.98 KB
master OptimizedCharSlice net6.0 1.42ms 1.02μs 3.82μs 0 0 0 0 b
master OptimizedCharSlice netcoreapp3.1 2.83ms 557ns 2.01μs 0 0 0 0 b
master OptimizedCharSlice net472 2.03ms 779ns 3.11μs 0 0 0 0 b
master OptimizedCharSliceWithPool net6.0 1.01ms 378ns 1.42μs 0 0 0 0 b
master OptimizedCharSliceWithPool netcoreapp3.1 1.89ms 1.64μs 6.35μs 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.13ms 747ns 2.89μs 0 0 0 0 b
#7930 OriginalCharSlice net6.0 1.96ms 525ns 1.96μs 0 0 0 640 KB
#7930 OriginalCharSlice netcoreapp3.1 3.91ms 2.36μs 8.83μs 0 0 0 640.05 KB
#7930 OriginalCharSlice net472 2.66ms 479ns 1.66μs 0 0 0 638.98 KB
#7930 OptimizedCharSlice net6.0 1.47ms 2.77μs 10.7μs 0 0 0 0 b
#7930 OptimizedCharSlice netcoreapp3.1 2.87ms 545ns 1.89μs 0 0 0 0 b
#7930 OptimizedCharSlice net472 1.92ms 1.06μs 3.96μs 0 0 0 0 b
#7930 OptimizedCharSliceWithPool net6.0 1.01ms 269ns 969ns 0 0 0 0 b
#7930 OptimizedCharSliceWithPool netcoreapp3.1 815μs 423ns 2.77μs 0 0 0 0 b
#7930 OptimizedCharSliceWithPool net472 1.13ms 783ns 3.03μs 0 0 0 0 b
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7930

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 1.118 652,173.03 729,324.48

Faster 🎉 in #7930

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 1.168 1,021,761.61 874,532.37

More allocations ⚠️ in #7930

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 41.82 KB 42.4 KB 578 B 1.38%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 657μs 2.7μs 10.5μs 0 0 0 41.67 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 652μs 802ns 3μs 0 0 0 41.82 KB
master WriteAndFlushEnrichedTraces net472 1.02ms 4.54μs 17.6μs 4.46 0 0 55.75 KB
#7930 WriteAndFlushEnrichedTraces net6.0 729μs 1.77μs 6.87μs 0 0 0 41.8 KB
#7930 WriteAndFlushEnrichedTraces netcoreapp3.1 720μs 4.03μs 25.8μs 0 0 0 42.4 KB
#7930 WriteAndFlushEnrichedTraces net472 878μs 3.99μs 15.5μs 4.46 0 0 55.63 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.84μs 8.91ns 33.3ns 0 0 0 968 B
master ExecuteNonQuery netcoreapp3.1 2.61μs 9.57ns 37.1ns 0 0 0 960 B
master ExecuteNonQuery net472 2.62μs 0.771ns 2.89ns 0.144 0 0 931 B
#7930 ExecuteNonQuery net6.0 1.87μs 2.14ns 8ns 0 0 0 968 B
#7930 ExecuteNonQuery netcoreapp3.1 2.64μs 10.4ns 40.3ns 0 0 0 960 B
#7930 ExecuteNonQuery net472 2.78μs 4.55ns 17.6ns 0.139 0 0 931 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.68μs 6.54ns 25.3ns 0 0 0 952 B
master CallElasticsearch netcoreapp3.1 2.16μs 10.5ns 41.9ns 0 0 0 968 B
master CallElasticsearch net472 3.52μs 3.05ns 11.8ns 0.141 0 0 955 B
master CallElasticsearchAsync net6.0 1.71μs 2.6ns 10.1ns 0 0 0 928 B
master CallElasticsearchAsync netcoreapp3.1 2.44μs 8.62ns 33.4ns 0 0 0 1.02 KB
master CallElasticsearchAsync net472 3.42μs 2.46ns 9.54ns 0.156 0 0 1.01 KB
#7930 CallElasticsearch net6.0 1.67μs 1.22ns 4.74ns 0 0 0 952 B
#7930 CallElasticsearch netcoreapp3.1 2.25μs 9.29ns 36ns 0 0 0 968 B
#7930 CallElasticsearch net472 3.53μs 7.04ns 27.3ns 0.14 0 0 955 B
#7930 CallElasticsearchAsync net6.0 1.71μs 8.4ns 34.6ns 0 0 0 928 B
#7930 CallElasticsearchAsync netcoreapp3.1 2.35μs 10.1ns 37.9ns 0 0 0 1.02 KB
#7930 CallElasticsearchAsync net472 3.41μs 0.954ns 3.69ns 0.154 0 0 1.01 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.83μs 5.91ns 22.9ns 0 0 0 896 B
master ExecuteAsync netcoreapp3.1 2.3μs 10.7ns 42.7ns 0 0 0 896 B
master ExecuteAsync net472 2.6μs 3.45ns 13.4ns 0.129 0 0 858 B
#7930 ExecuteAsync net6.0 1.9μs 7.13ns 27.6ns 0 0 0 896 B
#7930 ExecuteAsync netcoreapp3.1 2.29μs 10.6ns 41ns 0 0 0 896 B
#7930 ExecuteAsync net472 2.59μs 1.61ns 5.8ns 0.13 0 0 858 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 6.63μs 25.5ns 95.3ns 0 0 0 2.29 KB
master SendAsync netcoreapp3.1 8.95μs 23.2ns 86.8ns 0 0 0 2.83 KB
master SendAsync net472 12.1μs 8.78ns 34ns 0.485 0 0 3.08 KB
#7930 SendAsync net6.0 6.78μs 20.6ns 77.1ns 0 0 0 2.29 KB
#7930 SendAsync netcoreapp3.1 8.47μs 21.6ns 83.5ns 0 0 0 2.83 KB
#7930 SendAsync net472 12μs 8.77ns 32.8ns 0.479 0 0 3.08 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7930

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 254.94 KB 276.62 KB 21.68 KB 8.50%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 256.3 KB 275.62 KB 19.32 KB 7.54%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 44μs 242ns 1.33μs 0 0 0 42.51 KB
master StringConcatBenchmark netcoreapp3.1 48.9μs 265ns 1.48μs 0 0 0 42.54 KB
master StringConcatBenchmark net472 56.4μs 267ns 1.19μs 0 0 0 49.15 KB
master StringConcatAspectBenchmark net6.0 504μs 1.86μs 9.87μs 0 0 0 254.94 KB
master StringConcatAspectBenchmark netcoreapp3.1 515μs 2.52μs 10.7μs 0 0 0 256.3 KB
master StringConcatAspectBenchmark net472 398μs 1.81μs 6.51μs 0 0 0 270.34 KB
#7930 StringConcatBenchmark net6.0 48μs 234ns 937ns 0 0 0 42.51 KB
#7930 StringConcatBenchmark netcoreapp3.1 54.7μs 658ns 6.48μs 0 0 0 42.54 KB
#7930 StringConcatBenchmark net472 56.9μs 110ns 380ns 0 0 0 49.15 KB
#7930 StringConcatAspectBenchmark net6.0 474μs 1.85μs 9.07μs 0 0 0 276.62 KB
#7930 StringConcatAspectBenchmark netcoreapp3.1 527μs 2.59μs 11μs 0 0 0 275.62 KB
#7930 StringConcatAspectBenchmark net472 398μs 2.03μs 9.94μs 0 0 0 270.34 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.67μs 13.4ns 61.2ns 0 0 0 1.69 KB
master EnrichedLog netcoreapp3.1 3.68μs 4.93ns 19.1ns 0 0 0 1.7 KB
master EnrichedLog net472 3.99μs 4.91ns 19ns 0.238 0 0 1.6 KB
#7930 EnrichedLog net6.0 2.68μs 13.1ns 55.6ns 0 0 0 1.69 KB
#7930 EnrichedLog netcoreapp3.1 3.47μs 16.8ns 67.3ns 0 0 0 1.7 KB
#7930 EnrichedLog net472 3.92μs 3.04ns 11.8ns 0.235 0 0 1.6 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 123μs 133ns 499ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 126μs 34.9ns 130ns 0 0 0 4.31 KB
master EnrichedLog net472 165μs 22.5ns 81.1ns 0 0 0 4.51 KB
#7930 EnrichedLog net6.0 122μs 120ns 434ns 0 0 0 4.31 KB
#7930 EnrichedLog netcoreapp3.1 128μs 172ns 665ns 0 0 0 4.31 KB
#7930 EnrichedLog net472 166μs 11.9ns 45.9ns 0 0 0 4.51 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.03μs 17.1ns 66ns 0 0 0 2.24 KB
master EnrichedLog netcoreapp3.1 6.67μs 24.6ns 92.1ns 0 0 0 2.26 KB
master EnrichedLog net472 7.82μs 9.07ns 35.1ns 0.311 0 0 2.05 KB
#7930 EnrichedLog net6.0 5.12μs 15.3ns 59.1ns 0 0 0 2.24 KB
#7930 EnrichedLog netcoreapp3.1 6.83μs 27.6ns 107ns 0 0 0 2.26 KB
#7930 EnrichedLog net472 7.58μs 5.01ns 18.7ns 0.304 0 0 2.05 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 1.96μs 9.68ns 41.1ns 0 0 0 1.12 KB
master SendReceive netcoreapp3.1 2.48μs 3.71ns 14.4ns 0 0 0 1.14 KB
master SendReceive net472 2.98μs 1.7ns 6.57ns 0.165 0 0 1.12 KB
#7930 SendReceive net6.0 1.97μs 4.86ns 18.8ns 0 0 0 1.12 KB
#7930 SendReceive netcoreapp3.1 2.52μs 12.6ns 57.8ns 0 0 0 1.14 KB
#7930 SendReceive net472 3.01μs 1.7ns 6.14ns 0.166 0 0 1.12 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.3μs 1.44ns 5.59ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.82μs 16.8ns 65.2ns 0 0 0 1.63 KB
master EnrichedLog net472 6.82μs 9.25ns 35.8ns 0.306 0 0 2.03 KB
#7930 EnrichedLog net6.0 4.34μs 7.36ns 25.5ns 0 0 0 1.58 KB
#7930 EnrichedLog netcoreapp3.1 5.74μs 15.8ns 61.3ns 0 0 0 1.63 KB
#7930 EnrichedLog net472 6.74μs 5.76ns 20.8ns 0.303 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 768ns 0.336ns 1.3ns 0 0 0 520 B
master StartFinishSpan netcoreapp3.1 956ns 4.6ns 19ns 0 0 0 520 B
master StartFinishSpan net472 907ns 0.0351ns 0.127ns 0.0818 0 0 522 B
master StartFinishScope net6.0 914ns 4.52ns 19.2ns 0 0 0 640 B
master StartFinishScope netcoreapp3.1 1.13μs 5.07ns 19.6ns 0 0 0 640 B
master StartFinishScope net472 1.1μs 0.115ns 0.415ns 0.0935 0 0 602 B
master StartFinishTwoScopes net6.0 1.77μs 9.58ns 54.2ns 0 0 0 1.19 KB
master StartFinishTwoScopes netcoreapp3.1 2.25μs 10.4ns 41.5ns 0 0 0 1.19 KB
master StartFinishTwoScopes net472 2.16μs 1.62ns 6.27ns 0.162 0 0 1.08 KB
#7930 StartFinishSpan net6.0 766ns 1.11ns 4.14ns 0 0 0 520 B
#7930 StartFinishSpan netcoreapp3.1 950ns 4.94ns 24.7ns 0 0 0 520 B
#7930 StartFinishSpan net472 887ns 0.151ns 0.583ns 0.08 0 0 522 B
#7930 StartFinishScope net6.0 900ns 0.497ns 1.79ns 0 0 0 640 B
#7930 StartFinishScope netcoreapp3.1 1.11μs 5.65ns 27.7ns 0 0 0 640 B
#7930 StartFinishScope net472 1.07μs 0.0657ns 0.255ns 0.091 0 0 602 B
#7930 StartFinishTwoScopes net6.0 1.78μs 8.74ns 36ns 0 0 0 1.19 KB
#7930 StartFinishTwoScopes netcoreapp3.1 2.25μs 10.3ns 41.2ns 0 0 0 1.19 KB
#7930 StartFinishTwoScopes net472 2.12μs 2.14ns 8.28ns 0.17 0 0 1.08 KB
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.04μs 5.35ns 25.7ns 0 0 0 640 B
master RunOnMethodBegin netcoreapp3.1 1.35μs 5.29ns 19.1ns 0 0 0 640 B
master RunOnMethodBegin net472 1.42μs 0.992ns 3.71ns 0.0917 0 0 602 B
#7930 RunOnMethodBegin net6.0 1.06μs 1.04ns 4.03ns 0 0 0 640 B
#7930 RunOnMethodBegin netcoreapp3.1 1.34μs 3.12ns 11.7ns 0 0 0 640 B
#7930 RunOnMethodBegin net472 1.43μs 1.22ns 4.71ns 0.0926 0 0 602 B

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

dd-trace-dotnet-ci-bot bot commented Dec 9, 2025

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7930) 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
duration73.36 ± (73.42 - 73.73) ms68.37 ± (68.40 - 68.61) ms-6.8%
.NET Framework 4.8 - Bailout
duration77.44 ± (77.33 - 77.67) ms72.22 ± (72.18 - 72.33) ms-6.7%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1043.73 ± (1051.54 - 1062.40) ms1002.99 ± (1009.80 - 1019.27) ms-3.9%
.NET Core 3.1 - Baseline
process.internal_duration_ms22.52 ± (22.47 - 22.57) ms21.93 ± (21.89 - 21.96) ms-2.6%
process.time_to_main_ms83.69 ± (83.49 - 83.89) ms78.42 ± (78.29 - 78.55) ms-6.3%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.89 ± (10.89 - 10.89) MB10.93 ± (10.92 - 10.94) MB+0.4%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.48 ± (22.44 - 22.52) ms21.82 ± (21.80 - 21.84) ms-2.9%
process.time_to_main_ms85.60 ± (85.40 - 85.80) ms79.73 ± (79.64 - 79.83) ms-6.9%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.94 ± (10.93 - 10.94) MB10.95 ± (10.94 - 10.95) MB+0.1%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms219.85 ± (218.54 - 221.16) ms208.80 ± (207.29 - 210.31) ms-5.0%
process.time_to_main_ms492.73 ± (491.98 - 493.49) ms470.57 ± (469.95 - 471.20) ms-4.5%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.99 ± (47.96 - 48.01) MB48.08 ± (48.06 - 48.11) MB+0.2%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%
.NET 6 - Baseline
process.internal_duration_ms21.39 ± (21.36 - 21.43) ms20.57 ± (20.54 - 20.60) ms-3.8%
process.time_to_main_ms73.31 ± (73.14 - 73.49) ms68.13 ± (68.00 - 68.25) ms-7.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.61 ± (10.60 - 10.61) MB10.62 ± (10.62 - 10.62) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.31 ± (21.28 - 21.35) ms20.44 ± (20.41 - 20.47) ms-4.1%
process.time_to_main_ms74.28 ± (74.11 - 74.45) ms68.68 ± (68.60 - 68.76) ms-7.5%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.66 ± (10.65 - 10.66) MB10.66 ± (10.66 - 10.67) MB+0.0%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms206.90 ± (205.89 - 207.91) ms200.46 ± (199.39 - 201.52) ms-3.1%
process.time_to_main_ms457.80 ± (457.07 - 458.53) ms441.32 ± (440.71 - 441.94) ms-3.6%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.45 ± (48.42 - 48.48) MB48.34 ± (48.28 - 48.40) MB-0.2%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.1%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms19.60 ± (19.57 - 19.63) ms18.97 ± (18.93 - 19.00) ms-3.2%
process.time_to_main_ms72.40 ± (72.27 - 72.54) ms67.28 ± (67.16 - 67.40) ms-7.1%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.67 ± (7.67 - 7.68) MB7.66 ± (7.65 - 7.66) MB-0.2%
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.57 ± (19.52 - 19.62) ms18.86 ± (18.83 - 18.88) ms-3.6%
process.time_to_main_ms73.84 ± (73.67 - 74.00) ms68.30 ± (68.25 - 68.36) ms-7.5%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.73 ± (7.72 - 7.74) MB7.71 ± (7.70 - 7.72) MB-0.2%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms187.34 ± (186.55 - 188.13) ms178.38 ± (177.54 - 179.23) ms-4.8%
process.time_to_main_ms441.84 ± (441.19 - 442.49) ms425.70 ± (425.06 - 426.33) ms-3.7%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.35 ± (36.32 - 36.39) MB36.27 ± (36.24 - 36.30) MB-0.2%
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
duration193.21 ± (193.02 - 193.76) ms193.39 ± (193.36 - 194.22) ms+0.1%✅⬆️
.NET Framework 4.8 - Bailout
duration197.35 ± (197.23 - 197.83) ms197.10 ± (196.94 - 197.56) ms-0.1%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1110.24 ± (1112.17 - 1120.23) ms1113.15 ± (1115.90 - 1123.94) ms+0.3%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms187.72 ± (187.36 - 188.08) ms187.46 ± (187.14 - 187.78) ms-0.1%
process.time_to_main_ms80.57 ± (80.34 - 80.80) ms80.78 ± (80.59 - 80.96) ms+0.3%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.11 ± (16.08 - 16.14) MB16.11 ± (16.08 - 16.14) MB+0.0%✅⬆️
runtime.dotnet.threads.count20 ± (19 - 20)20 ± (20 - 20)+0.9%✅⬆️
.NET Core 3.1 - Bailout
process.internal_duration_ms187.02 ± (186.72 - 187.31) ms186.98 ± (186.69 - 187.28) ms-0.0%
process.time_to_main_ms81.74 ± (81.59 - 81.89) ms81.88 ± (81.76 - 81.99) ms+0.2%✅⬆️
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.13 ± (16.11 - 16.16) MB16.23 ± (16.20 - 16.26) MB+0.6%✅⬆️
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+0.8%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms395.67 ± (393.09 - 398.24) ms398.49 ± (395.66 - 401.32) ms+0.7%✅⬆️
process.time_to_main_ms476.54 ± (475.78 - 477.31) ms476.26 ± (475.58 - 476.95) ms-0.1%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.35 ± (58.19 - 58.50) MB58.63 ± (58.49 - 58.77) MB+0.5%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 30)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms192.47 ± (192.09 - 192.84) ms191.88 ± (191.53 - 192.24) ms-0.3%
process.time_to_main_ms70.07 ± (69.86 - 70.28) ms69.97 ± (69.78 - 70.15) ms-0.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed15.93 ± (15.77 - 16.09) MB16.27 ± (16.17 - 16.37) MB+2.2%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 18)19 ± (19 - 19)+3.6%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms190.99 ± (190.65 - 191.33) ms190.93 ± (190.63 - 191.24) ms-0.0%
process.time_to_main_ms70.61 ± (70.52 - 70.70) ms70.92 ± (70.82 - 71.02) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed15.98 ± (15.82 - 16.13) MB16.10 ± (15.95 - 16.25) MB+0.8%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.2%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms408.83 ± (406.32 - 411.34) ms407.60 ± (405.31 - 409.89) ms-0.3%
process.time_to_main_ms444.75 ± (444.16 - 445.34) ms447.48 ± (446.81 - 448.14) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed58.79 ± (58.64 - 58.94) MB58.84 ± (58.68 - 58.99) MB+0.1%✅⬆️
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (30 - 30)+0.1%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms190.47 ± (190.08 - 190.86) ms189.65 ± (189.40 - 189.89) ms-0.4%
process.time_to_main_ms69.30 ± (69.12 - 69.48) ms69.68 ± (69.48 - 69.87) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.73 ± (11.70 - 11.75) MB11.80 ± (11.77 - 11.83) MB+0.6%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.2%
.NET 8 - Bailout
process.internal_duration_ms188.79 ± (188.50 - 189.09) ms189.31 ± (189.11 - 189.51) ms+0.3%✅⬆️
process.time_to_main_ms70.23 ± (70.11 - 70.35) ms70.74 ± (70.61 - 70.86) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.78 ± (11.75 - 11.81) MB11.86 ± (11.83 - 11.88) MB+0.7%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-1.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms360.05 ± (358.30 - 361.80) ms364.65 ± (363.28 - 366.02) ms+1.3%✅⬆️
process.time_to_main_ms426.78 ± (426.05 - 427.51) ms429.98 ± (429.23 - 430.73) ms+0.7%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.90 ± (47.87 - 47.93) MB47.87 ± (47.84 - 47.91) MB-0.1%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-0.2%
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 (7930) - mean (69ms)  : 67, 70
    master - mean (74ms)  : 71, 76

    section Bailout
    This PR (7930) - mean (72ms)  : 72, 73
    master - mean (77ms)  : 76, 79

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (1,015ms)  : 944, 1085
    master - mean (1,057ms)  : 976, 1138

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 (7930) - mean (106ms)  : 103, 109
    master - mean (113ms)  : 110, 116

    section Bailout
    This PR (7930) - mean (107ms)  : 105, 108
    master - mean (115ms)  : 112, 118

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (707ms)  : 678, 737
    master - mean (745ms)  : 710, 780

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

    section Bailout
    This PR (7930) - mean (94ms)  : 92, 95
    master - mean (102ms)  : 100, 104

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (667ms)  : 644, 691
    master - mean (691ms)  : 667, 715

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7930) - mean (92ms)  : 90, 95
    master - mean (100ms)  : 97, 103

    section Bailout
    This PR (7930) - mean (93ms)  : 92, 94
    master - mean (101ms)  : 99, 103

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (631ms)  : 617, 646
    master - mean (660ms)  : 636, 683

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 (7930) - mean (194ms)  : 189, 198
    master - mean (193ms)  : 190, 197

    section Bailout
    This PR (7930) - mean (197ms)  : 194, 200
    master - mean (198ms)  : 195, 200

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (1,120ms)  : 1062, 1178
    master - mean (1,116ms)  : 1058, 1174

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 (7930) - mean (277ms)  : 273, 281
    master - mean (277ms)  : 272, 281

    section Bailout
    This PR (7930) - mean (277ms)  : 273, 281
    master - mean (277ms)  : 273, 282

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (915ms)  : 872, 958
    master - mean (905ms)  : 866, 945

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7930) - mean (270ms)  : 266, 275
    master - mean (271ms)  : 265, 276

    section Bailout
    This PR (7930) - mean (270ms)  : 266, 274
    master - mean (270ms)  : 265, 275

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (891ms)  : 841, 940
    master - mean (888ms)  : 847, 928

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7930) - mean (269ms)  : 265, 273
    master - mean (270ms)  : 260, 280

    section Bailout
    This PR (7930) - mean (269ms)  : 266, 273
    master - mean (268ms)  : 264, 272

    section CallTarget+Inlining+NGEN
    This PR (7930) - mean (825ms)  : 807, 843
    master - mean (819ms)  : 797, 842

Loading

@datadog-official

This comment has been minimized.

@NachoEchevarria NachoEchevarria changed the title Nacho/hot chocolate duck typing exception Fix HotChocolate duck typing exception Dec 10, 2025
@NachoEchevarria NachoEchevarria changed the title Fix HotChocolate duck typing exception Fix HotChocolate duck typing error Dec 10, 2025
@NachoEchevarria NachoEchevarria added area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) identified-by:telemetry labels Dec 10, 2025
@NachoEchevarria NachoEchevarria marked this pull request as ready for review December 10, 2025 14:43
@NachoEchevarria NachoEchevarria requested review from a team as code owners December 10, 2025 14:43
graphql.source:
query ErrorQuery {
throwException
},
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is the error thrown for indexes that previously would cause the exception.

Copy link
Member

@andrewlock andrewlock left a comment

Choose a reason for hiding this comment

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

Nice catch!

@NachoEchevarria
Copy link
Collaborator Author

Thanks for your reviews!

@NachoEchevarria NachoEchevarria merged commit be9fc0d into master Dec 19, 2025
149 of 151 checks passed
@NachoEchevarria NachoEchevarria deleted the nacho/HotChocolateDuckTypingException branch December 19, 2025 10:15
@github-actions github-actions bot added this to the vNext-v3 milestone Dec 19, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:tracer The core tracer library (Datadog.Trace, does not include OpenTracing, native code, or integrations) identified-by:telemetry type:bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants