Skip to content

Conversation

@daniel-romano-DD
Copy link
Contributor

@daniel-romano-DD daniel-romano-DD commented Nov 23, 2025

Summary of changes

This PR simplifies the lifecycle and usage of iast::Dataflow within the .NET tracer by removing unnecessary synchronization complexity and consolidating initialization logic. After validating that the profiler’s lifecycle guarantees make the race condition targeted in #7838 impossible, the extra locking and state checks introduced there were identified as unnecessary. This PR therefore removes them and replaces them with a clearer, more maintainable initialization model.

The end result is the same runtime behavior, but with cleaner, more predictable code paths.

Reason for change

During investigation of the suspected race in Dataflow, we discovered:

_dataflow is created before any IAST-related callbacks can run.

_dataflow is destroyed only during CorProfiler::Shutdown, after all runtime callbacks have stopped.

Therefore, there is no window where runtime threads can access a partially-initialized or null Dataflow instance.

Because the profiler’s lifecycle already prevents the problematic interleavings, the additional locking and defensive checks from #7838 were redundant. They increased complexity without improving correctness.

This PR cleans that up.

Implementation details

What this PR does

  1. Consolidates Dataflow initialization logic

Dataflow::LoadAspects becomes the single, authoritative entry point for initialization. No scattered flags, no duplicated checks.

  1. Removes unnecessary locking around initialization

Since lifecycle guarantees prevent concurrent initialization, the critical-section guarding and initialization state added in #7838 are removed.

  1. Simplifies callback paths

Profiler callbacks (ModuleLoaded, ModuleUnloaded, IAST instrumentation setup, etc.) now:

Assume _dataflow exists.

Only guard the internal data structures that are actually accessed concurrently.

Remove early-return branches and over-defensive locking patterns.

  1. Cleans up dead code and unused members

Any state variables, flags, or locking constructs made obsolete by the simplified lifecycle are removed, shrinking the Dataflow class footprint.

Result

Same behavioral correctness.

Fewer code paths and edge cases.

Clearer lifecycle contract: Dataflow always exists during the period where callbacks may use it.

Easier to maintain and reason about for future IAST development.

Test coverage

Re-ran IAST tests on Windows x86/x64 to confirm no regressions.

Validated profiler lifecycle behavior to ensure _dataflow is always valid during runtime callbacks.

Confirmed no reappearance of previous intermittent failures.

Other details

@pr-commenter
Copy link

pr-commenter bot commented Nov 23, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7853 compared to master:

  • 2 benchmarks are slower, with geometric mean 1.543
  • 5 benchmarks have fewer allocations
  • 6 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.6μs 59.8ns 410ns 0 0 0 5.49 KB
master StartStopWithChild netcoreapp3.1 13.7μs 72.7ns 364ns 0 0 0 5.7 KB
master StartStopWithChild net472 22.2μs 124ns 830ns 0.874 0.219 0 6.09 KB
#7853 StartStopWithChild net6.0 10.7μs 56.9ns 284ns 0 0 0 5.51 KB
#7853 StartStopWithChild netcoreapp3.1 14μs 69.2ns 294ns 0 0 0 5.73 KB
#7853 StartStopWithChild net472 22.5μs 122ns 682ns 0.859 0.215 0 6.08 KB
Benchmarks.Trace.AgentWriterBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.AgentWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 2.71 KB 2.7 KB -15 B -0.55%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 939μs 367ns 1.42μs 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.03ms 552ns 2.06μs 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces net472 1.2ms 125ns 484ns 0 0 0 3.31 KB
#7853 WriteAndFlushEnrichedTraces net6.0 932μs 74.7ns 279ns 0 0 0 2.7 KB
#7853 WriteAndFlushEnrichedTraces netcoreapp3.1 1.03ms 212ns 821ns 0 0 0 2.7 KB
#7853 WriteAndFlushEnrichedTraces net472 1.2ms 210ns 787ns 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 1.12μs 0.877ns 3.4ns 0 0 0 1.22 KB
master AllCycleSimpleBody netcoreapp3.1 1.42μs 7.76ns 43.9ns 0 0 0 1.2 KB
master AllCycleSimpleBody net472 1.02μs 2.6ns 10.1ns 0.192 0 0 1.23 KB
master AllCycleMoreComplexBody net6.0 7.24μs 32.3ns 125ns 0 0 0 4.72 KB
master AllCycleMoreComplexBody netcoreapp3.1 9.06μs 43.5ns 179ns 0 0 0 4.62 KB
master AllCycleMoreComplexBody net472 7.57μs 4.62ns 17.9ns 0.721 0 0 4.74 KB
master ObjectExtractorSimpleBody net6.0 326ns 1.75ns 9.43ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 418ns 2.38ns 15.9ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 298ns 0.0238ns 0.0857ns 0.0439 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.34μs 29.8ns 115ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.91μs 36.3ns 141ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.7μs 9.57ns 37.1ns 0.6 0 0 3.8 KB
#7853 AllCycleSimpleBody net6.0 1.07μs 0.377ns 1.41ns 0 0 0 1.22 KB
#7853 AllCycleSimpleBody netcoreapp3.1 1.42μs 0.531ns 1.84ns 0 0 0 1.2 KB
#7853 AllCycleSimpleBody net472 1.02μs 0.512ns 1.98ns 0.194 0 0 1.23 KB
#7853 AllCycleMoreComplexBody net6.0 7.14μs 38.7ns 209ns 0 0 0 4.72 KB
#7853 AllCycleMoreComplexBody netcoreapp3.1 9.03μs 42.8ns 166ns 0 0 0 4.62 KB
#7853 AllCycleMoreComplexBody net472 7.59μs 4.56ns 17.7ns 0.721 0 0 4.74 KB
#7853 ObjectExtractorSimpleBody net6.0 326ns 1.67ns 7.47ns 0 0 0 280 B
#7853 ObjectExtractorSimpleBody netcoreapp3.1 405ns 0.13ns 0.504ns 0 0 0 272 B
#7853 ObjectExtractorSimpleBody net472 294ns 0.0337ns 0.13ns 0.0443 0 0 281 B
#7853 ObjectExtractorMoreComplexBody net6.0 6.25μs 30.4ns 133ns 0 0 0 3.78 KB
#7853 ObjectExtractorMoreComplexBody netcoreapp3.1 7.88μs 4.04ns 15.7ns 0 0 0 3.69 KB
#7853 ObjectExtractorMoreComplexBody net472 6.76μs 9.39ns 36.4ns 0.572 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 76.9μs 24ns 89.7ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 96.2μs 276ns 1.07μs 0 0 0 32.4 KB
master EncodeArgs net472 118μs 17.2ns 66.5ns 4.69 0 0 32.5 KB
master EncodeLegacyArgs net6.0 147μs 38.7ns 145ns 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 199μs 348ns 1.35μs 0 0 0 2.14 KB
master EncodeLegacyArgs net472 267μs 28ns 108ns 0 0 0 2.16 KB
#7853 EncodeArgs net6.0 76.5μs 303ns 1.17μs 0 0 0 32.4 KB
#7853 EncodeArgs netcoreapp3.1 97μs 123ns 425ns 0 0 0 32.4 KB
#7853 EncodeArgs net472 109μs 9.7ns 33.6ns 4.91 0 0 32.51 KB
#7853 EncodeLegacyArgs net6.0 152μs 18.6ns 72ns 0 0 0 2.15 KB
#7853 EncodeLegacyArgs netcoreapp3.1 197μs 50.4ns 175ns 0 0 0 2.14 KB
#7853 EncodeLegacyArgs net472 265μs 31.7ns 110ns 0 0 0 2.16 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7853

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmark‑netcoreapp3.1 2.081 410,850.94 855,141.73

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 397μs 76ns 274ns 0 0 0 4.55 KB
master RunWafRealisticBenchmark netcoreapp3.1 411μs 285ns 1.07μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 427μs 63.3ns 245ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 284μs 41.3ns 160ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 298μs 62.7ns 226ns 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 311μs 21.9ns 85ns 0 0 0 2.29 KB
#7853 RunWafRealisticBenchmark net6.0 391μs 48.7ns 189ns 0 0 0 4.56 KB
#7853 RunWafRealisticBenchmark netcoreapp3.1 820μs 12μs 117μs 0 0 0 4.48 KB
#7853 RunWafRealisticBenchmark net472 431μs 65.2ns 253ns 0 0 0 4.66 KB
#7853 RunWafRealisticBenchmarkWithAttack net6.0 285μs 45.2ns 175ns 0 0 0 2.24 KB
#7853 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 299μs 70.8ns 265ns 0 0 0 2.22 KB
#7853 RunWafRealisticBenchmarkWithAttack net472 310μs 29.1ns 113ns 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μs 72.2ns 279ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 70.8μs 66ns 247ns 0 0 0 17.42 KB
master SendRequest net472 0.00512ns 0.00217ns 0.00841ns 0 0 0 0 b
#7853 SendRequest net6.0 60.7μs 52.4ns 196ns 0 0 0 14.52 KB
#7853 SendRequest netcoreapp3.1 71.1μs 331ns 1.66μs 0 0 0 17.42 KB
#7853 SendRequest net472 0.00357ns 0.0016ns 0.0062ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7853

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑netcoreapp3.1 1.143 808,670.90 924,592.50

More allocations ⚠️ in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑netcoreapp3.1 1 B 32 B 31 B 3,100.00%

Fewer allocations 🎉 in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSliceWithPool‑net6.0 4 B 3 B -1 B -25.00%
Benchmarks.Trace.CharSliceBenchmark.OptimizedCharSlice‑net6.0 7 B 2 B -5 B -71.43%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 1.96ms 5.54μs 21.4μs 0 0 0 640.01 KB
master OriginalCharSlice netcoreapp3.1 2.08ms 2.29μs 8.25μs 0 0 0 640 KB
master OriginalCharSlice net472 2.72ms 130ns 504ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.35ms 290ns 1.05μs 0 0 0 7 B
master OptimizedCharSlice netcoreapp3.1 1.66ms 498ns 1.93μs 0 0 0 1 B
master OptimizedCharSlice net472 1.99ms 418ns 1.62μs 0 0 0 73 B
master OptimizedCharSliceWithPool net6.0 849μs 60.4ns 218ns 0 0 0 4 B
master OptimizedCharSliceWithPool netcoreapp3.1 809μs 37.6ns 136ns 0 0 0 0 b
master OptimizedCharSliceWithPool net472 1.15ms 124ns 482ns 0 0 0 47 B
#7853 OriginalCharSlice net6.0 1.91ms 2.74μs 10.3μs 0 0 0 640.01 KB
#7853 OriginalCharSlice netcoreapp3.1 2.18ms 5.68μs 20.5μs 0 0 0 640 KB
#7853 OriginalCharSlice net472 2.62ms 620ns 2.32μs 100 0 0 641.95 KB
#7853 OptimizedCharSlice net6.0 1.34ms 593ns 2.3μs 0 0 0 2 B
#7853 OptimizedCharSlice netcoreapp3.1 1.73ms 372ns 1.44μs 0 0 0 32 B
#7853 OptimizedCharSlice net472 1.93ms 273ns 1.06μs 0 0 0 73 B
#7853 OptimizedCharSliceWithPool net6.0 876μs 55.2ns 214ns 0 0 0 3 B
#7853 OptimizedCharSliceWithPool netcoreapp3.1 925μs 56ns 217ns 0 0 0 0 b
#7853 OptimizedCharSliceWithPool net472 1.25ms 229ns 885ns 0 0 0 47 B
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑netcoreapp3.1 42.07 KB 42.85 KB 776 B 1.84%
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 41.54 KB 41.91 KB 367 B 0.88%

Fewer allocations 🎉 in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 56.5 KB 55.93 KB -578 B -1.02%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 716μs 3.07μs 11.9μs 0 0 0 41.54 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 755μs 4.85μs 46.5μs 0 0 0 42.07 KB
master WriteAndFlushEnrichedTraces net472 866μs 3.74μs 14μs 8.93 0 0 56.5 KB
#7853 WriteAndFlushEnrichedTraces net6.0 695μs 3.91μs 26.2μs 0 0 0 41.91 KB
#7853 WriteAndFlushEnrichedTraces netcoreapp3.1 773μs 3.56μs 17.8μs 0 0 0 42.85 KB
#7853 WriteAndFlushEnrichedTraces net472 900μs 2.77μs 10.4μs 4.46 0 0 55.93 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.89μs 1.66ns 6.43ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.62μs 8.01ns 31ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 3.03μs 3.89ns 15.1ns 0.152 0.0152 0 987 B
#7853 ExecuteNonQuery net6.0 1.91μs 8.72ns 32.6ns 0 0 0 1.02 KB
#7853 ExecuteNonQuery netcoreapp3.1 2.55μs 6.97ns 26.1ns 0 0 0 1.02 KB
#7853 ExecuteNonQuery net472 2.87μs 2.11ns 8.16ns 0.157 0.0142 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.72μs 0.731ns 2.83ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.29μs 7.79ns 30.2ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.59μs 6.94ns 26.9ns 0.16 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.82μs 5.68ns 22ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.44μs 11.9ns 51.9ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.79μs 4.34ns 16.8ns 0.17 0 0 1.1 KB
#7853 CallElasticsearch net6.0 1.75μs 6.7ns 24.2ns 0 0 0 1.03 KB
#7853 CallElasticsearch netcoreapp3.1 2.23μs 11.3ns 51.9ns 0 0 0 1.03 KB
#7853 CallElasticsearch net472 3.55μs 4.32ns 16.7ns 0.161 0 0 1.04 KB
#7853 CallElasticsearchAsync net6.0 1.78μs 7.71ns 29.9ns 0 0 0 1.01 KB
#7853 CallElasticsearchAsync netcoreapp3.1 2.36μs 10.3ns 39.8ns 0 0 0 1.08 KB
#7853 CallElasticsearchAsync net472 3.83μs 3.96ns 15.4ns 0.172 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.85μs 8.98ns 35.9ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.44μs 1.79ns 6.68ns 0 0 0 952 B
master ExecuteAsync net472 2.58μs 4.33ns 16.8ns 0.141 0 0 915 B
#7853 ExecuteAsync net6.0 1.87μs 8.39ns 31.4ns 0 0 0 952 B
#7853 ExecuteAsync netcoreapp3.1 2.51μs 11.6ns 46.4ns 0 0 0 952 B
#7853 ExecuteAsync net472 2.53μs 0.662ns 2.56ns 0.139 0 0 915 B
Benchmarks.Trace.HttpClientBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendAsync net6.0 6.77μs 4.53ns 16.9ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.65μs 27.9ns 108ns 0 0 0 2.9 KB
master SendAsync net472 12.6μs 5.72ns 20.6ns 0.505 0 0 3.18 KB
#7853 SendAsync net6.0 7.15μs 11.6ns 44.9ns 0 0 0 2.36 KB
#7853 SendAsync netcoreapp3.1 9μs 26.5ns 103ns 0 0 0 2.9 KB
#7853 SendAsync net472 11.9μs 9.59ns 37.1ns 0.477 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 257.18 KB 273.11 KB 15.94 KB 6.20%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 274.06 KB 276.59 KB 2.53 KB 0.92%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.97 KB 44.3 KB 328 B 0.75%

Fewer allocations 🎉 in #7853

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 43.22 KB 42.76 KB -456 B -1.06%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 46.5μs 276ns 2.66μs 0 0 0 43.97 KB
master StringConcatBenchmark netcoreapp3.1 49.8μs 257ns 1.63μs 0 0 0 43.22 KB
master StringConcatBenchmark net472 57.8μs 286ns 1.18μs 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 469μs 1.99μs 7.18μs 0 0 0 276.89 KB
master StringConcatAspectBenchmark netcoreapp3.1 524μs 2.19μs 7.91μs 0 0 0 257.18 KB
master StringConcatAspectBenchmark net472 410μs 1.88μs 9.78μs 0 0 0 274.06 KB
#7853 StringConcatBenchmark net6.0 44.3μs 227ns 1.07μs 0 0 0 44.3 KB
#7853 StringConcatBenchmark netcoreapp3.1 54.3μs 753ns 7.38μs 0 0 0 42.76 KB
#7853 StringConcatBenchmark net472 57.1μs 208ns 750ns 0 0 0 57.34 KB
#7853 StringConcatAspectBenchmark net6.0 492μs 2.33μs 11.9μs 0 0 0 277.23 KB
#7853 StringConcatAspectBenchmark netcoreapp3.1 504μs 1.5μs 5.41μs 0 0 0 273.11 KB
#7853 StringConcatAspectBenchmark net472 411μs 2.27μs 14.4μs 0 0 0 276.59 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.7μs 14.6ns 83.7ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.63μs 12.2ns 47.3ns 0 0 0 1.7 KB
master EnrichedLog net472 4.01μs 2.3ns 8.91ns 0.26 0 0 1.64 KB
#7853 EnrichedLog net6.0 2.69μs 1.98ns 7.68ns 0 0 0 1.7 KB
#7853 EnrichedLog netcoreapp3.1 3.64μs 3.67ns 14.2ns 0 0 0 1.7 KB
#7853 EnrichedLog net472 3.95μs 3.02ns 11.7ns 0.256 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 49.2ns 190ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 128μs 209ns 809ns 0 0 0 4.31 KB
master EnrichedLog net472 169μs 75.6ns 293ns 0 0 0 4.52 KB
#7853 EnrichedLog net6.0 123μs 55ns 206ns 0 0 0 4.31 KB
#7853 EnrichedLog netcoreapp3.1 128μs 176ns 658ns 0 0 0 4.31 KB
#7853 EnrichedLog net472 167μs 147ns 569ns 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 4.88μs 20.8ns 80.8ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.8μs 17.1ns 66.3ns 0 0 0 2.26 KB
master EnrichedLog net472 7.49μs 4.38ns 17ns 0.3 0 0 2.08 KB
#7853 EnrichedLog net6.0 4.9μs 5.79ns 21.6ns 0 0 0 2.26 KB
#7853 EnrichedLog netcoreapp3.1 6.98μs 25.1ns 97.2ns 0 0 0 2.26 KB
#7853 EnrichedLog net472 7.7μs 6.82ns 25.5ns 0.31 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 1.94μs 10.2ns 50ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.56μs 12.5ns 48.4ns 0 0 0 1.2 KB
master SendReceive net472 3.01μs 3.07ns 11.5ns 0.183 0 0 1.2 KB
#7853 SendReceive net6.0 1.96μs 9.28ns 36ns 0 0 0 1.2 KB
#7853 SendReceive netcoreapp3.1 2.57μs 13.3ns 62.2ns 0 0 0 1.2 KB
#7853 SendReceive net472 3.19μs 2.55ns 9.53ns 0.176 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.34μs 6.48ns 25.1ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.54μs 17.2ns 66.8ns 0 0 0 1.63 KB
master EnrichedLog net472 6.83μs 7.27ns 28.2ns 0.307 0 0 2.03 KB
#7853 EnrichedLog net6.0 4.3μs 10.7ns 40ns 0 0 0 1.58 KB
#7853 EnrichedLog netcoreapp3.1 5.77μs 13.4ns 51.8ns 0 0 0 1.63 KB
#7853 EnrichedLog net472 6.77μs 9.23ns 35.7ns 0.302 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 769ns 4.17ns 25ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 961ns 5.1ns 25.5ns 0 0 0 576 B
master StartFinishSpan net472 974ns 0.344ns 1.33ns 0.0883 0 0 578 B
master StartFinishScope net6.0 902ns 4.53ns 20.7ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.17μs 5.91ns 27.7ns 0 0 0 696 B
master StartFinishScope net472 1.18μs 0.388ns 1.5ns 0.0996 0 0 658 B
#7853 StartFinishSpan net6.0 781ns 4.16ns 22.4ns 0 0 0 576 B
#7853 StartFinishSpan netcoreapp3.1 951ns 5.11ns 26.5ns 0 0 0 576 B
#7853 StartFinishSpan net472 950ns 0.46ns 1.78ns 0.0902 0 0 578 B
#7853 StartFinishScope net6.0 947ns 5.24ns 30.6ns 0 0 0 696 B
#7853 StartFinishScope netcoreapp3.1 1.19μs 6.15ns 30.8ns 0 0 0 696 B
#7853 StartFinishScope net472 1.18μs 0.768ns 2.97ns 0.0997 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.07μs 5.21ns 22.1ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.5μs 7.08ns 30ns 0 0 0 696 B
master RunOnMethodBegin net472 1.43μs 0.251ns 0.938ns 0.1 0 0 658 B
#7853 RunOnMethodBegin net6.0 1.09μs 5.08ns 20.3ns 0 0 0 696 B
#7853 RunOnMethodBegin netcoreapp3.1 1.49μs 7.19ns 31.3ns 0 0 0 696 B
#7853 RunOnMethodBegin net472 1.43μs 0.362ns 1.31ns 0.101 0 0 658 B

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

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

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7853) 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
duration76.86 ± (76.95 - 77.90) ms76.56 ± (76.96 - 77.90) ms-0.4%
.NET Framework 4.8 - Bailout
duration81.36 ± (81.11 - 82.02) ms80.91 ± (80.99 - 82.12) ms-0.6%
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1083.25 ± (1089.51 - 1103.30) ms1096.08 ± (1092.80 - 1106.42) ms+1.2%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms23.01 ± (22.93 - 23.08) ms23.36 ± (23.26 - 23.45) ms+1.5%✅⬆️
process.time_to_main_ms88.78 ± (88.30 - 89.26) ms90.43 ± (89.93 - 90.93) ms+1.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.91 ± (10.91 - 10.91) MB10.92 ± (10.91 - 10.92) MB+0.1%✅⬆️
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.96 ± (22.89 - 23.03) ms23.03 ± (22.96 - 23.11) ms+0.3%✅⬆️
process.time_to_main_ms91.26 ± (90.71 - 91.81) ms90.75 ± (90.26 - 91.24) ms-0.6%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.95 ± (10.95 - 10.95) MB10.97 ± (10.96 - 10.97) MB+0.2%✅⬆️
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms223.49 ± (222.22 - 224.75) ms225.73 ± (224.27 - 227.20) ms+1.0%✅⬆️
process.time_to_main_ms511.25 ± (509.77 - 512.73) ms513.32 ± (511.61 - 515.02) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed47.69 ± (47.67 - 47.71) MB47.74 ± (47.71 - 47.76) MB+0.1%✅⬆️
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.1%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms21.95 ± (21.88 - 22.02) ms22.08 ± (21.99 - 22.18) ms+0.6%✅⬆️
process.time_to_main_ms78.21 ± (77.82 - 78.60) ms79.03 ± (78.57 - 79.50) ms+1.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.60 ± (10.60 - 10.60) MB10.64 ± (10.64 - 10.64) MB+0.4%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms21.69 ± (21.61 - 21.77) ms22.10 ± (22.02 - 22.17) ms+1.9%✅⬆️
process.time_to_main_ms78.39 ± (77.93 - 78.85) ms81.08 ± (80.65 - 81.50) ms+3.4%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.68 ± (10.67 - 10.68) MB10.67 ± (10.67 - 10.68) MB-0.0%
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms210.47 ± (208.98 - 211.96) ms214.87 ± (213.50 - 216.24) ms+2.1%✅⬆️
process.time_to_main_ms471.75 ± (470.36 - 473.13) ms478.85 ± (477.42 - 480.28) ms+1.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed48.05 ± (48.03 - 48.08) MB48.05 ± (48.03 - 48.08) MB-0.0%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms20.29 ± (20.20 - 20.38) ms20.22 ± (20.14 - 20.30) ms-0.3%
process.time_to_main_ms77.53 ± (77.08 - 77.97) ms78.32 ± (77.84 - 78.80) ms+1.0%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.65 ± (7.65 - 7.66) MB7.66 ± (7.65 - 7.66) MB+0.1%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.95 ± (19.88 - 20.02) ms20.41 ± (20.32 - 20.51) ms+2.3%✅⬆️
process.time_to_main_ms77.53 ± (77.10 - 77.95) ms80.58 ± (80.12 - 81.03) ms+3.9%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.70 ± (7.69 - 7.70) MB7.70 ± (7.70 - 7.71) MB+0.0%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms198.17 ± (197.07 - 199.27) ms195.49 ± (194.42 - 196.55) ms-1.4%
process.time_to_main_ms470.14 ± (468.53 - 471.76) ms467.67 ± (466.37 - 468.97) ms-0.5%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed36.53 ± (36.49 - 36.56) MB36.52 ± (36.48 - 36.55) MB-0.0%
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
duration194.45 ± (194.43 - 195.32) ms194.10 ± (194.43 - 195.22) ms-0.2%
.NET Framework 4.8 - Bailout
duration197.33 ± (197.33 - 197.86) ms197.80 ± (197.76 - 198.22) ms+0.2%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1122.29 ± (1126.99 - 1137.83) ms1115.31 ± (1120.81 - 1130.68) ms-0.6%
.NET Core 3.1 - Baseline
process.internal_duration_ms191.71 ± (191.24 - 192.18) ms189.67 ± (189.32 - 190.02) ms-1.1%
process.time_to_main_ms82.44 ± (82.19 - 82.69) ms81.74 ± (81.53 - 81.95) ms-0.9%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.09 ± (16.07 - 16.11) MB16.16 ± (16.14 - 16.19) MB+0.5%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (19 - 20)-0.3%
.NET Core 3.1 - Bailout
process.internal_duration_ms191.09 ± (190.64 - 191.55) ms188.43 ± (188.11 - 188.74) ms-1.4%
process.time_to_main_ms83.94 ± (83.72 - 84.16) ms82.88 ± (82.73 - 83.04) ms-1.3%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.15 ± (16.13 - 16.17) MB16.23 ± (16.21 - 16.26) MB+0.5%✅⬆️
runtime.dotnet.threads.count21 ± (21 - 21)21 ± (21 - 21)+0.2%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms401.06 ± (398.67 - 403.45) ms404.94 ± (402.13 - 407.76) ms+1.0%✅⬆️
process.time_to_main_ms477.96 ± (477.02 - 478.89) ms474.23 ± (473.60 - 474.86) ms-0.8%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed58.70 ± (58.59 - 58.81) MB58.80 ± (58.70 - 58.89) MB+0.2%✅⬆️
runtime.dotnet.threads.count29 ± (29 - 30)29 ± (29 - 29)-0.1%
.NET 6 - Baseline
process.internal_duration_ms192.64 ± (192.27 - 193.01) ms193.31 ± (192.90 - 193.73) ms+0.4%✅⬆️
process.time_to_main_ms70.29 ± (70.12 - 70.45) ms70.67 ± (70.47 - 70.88) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.00 ± (15.86 - 16.15) MB16.45 ± (16.42 - 16.48) MB+2.8%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 18)19 ± (19 - 19)+3.8%✅⬆️
.NET 6 - Bailout
process.internal_duration_ms195.05 ± (194.57 - 195.53) ms193.18 ± (192.71 - 193.65) ms-1.0%
process.time_to_main_ms72.24 ± (72.07 - 72.41) ms71.68 ± (71.49 - 71.87) ms-0.8%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.45 ± (16.43 - 16.47) MB16.46 ± (16.43 - 16.49) MB+0.0%✅⬆️
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)-0.3%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms418.48 ± (415.79 - 421.16) ms415.96 ± (412.88 - 419.05) ms-0.6%
process.time_to_main_ms445.16 ± (444.44 - 445.88) ms443.27 ± (442.68 - 443.87) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed59.13 ± (59.01 - 59.24) MB58.74 ± (58.60 - 58.88) MB-0.6%
runtime.dotnet.threads.count30 ± (30 - 30)30 ± (29 - 30)-0.2%
.NET 8 - Baseline
process.internal_duration_ms193.81 ± (193.34 - 194.28) ms190.44 ± (190.17 - 190.72) ms-1.7%
process.time_to_main_ms70.63 ± (70.43 - 70.84) ms69.87 ± (69.68 - 70.05) ms-1.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.70 ± (11.68 - 11.72) MB11.76 ± (11.72 - 11.79) MB+0.5%✅⬆️
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 19)+0.8%✅⬆️
.NET 8 - Bailout
process.internal_duration_ms191.07 ± (190.76 - 191.38) ms190.86 ± (190.49 - 191.24) ms-0.1%
process.time_to_main_ms71.29 ± (71.17 - 71.41) ms71.01 ± (70.88 - 71.13) ms-0.4%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.78 ± (11.76 - 11.81) MB11.78 ± (11.76 - 11.81) MB+0.0%✅⬆️
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)+0.0%✅⬆️
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms369.77 ± (368.11 - 371.42) ms366.26 ± (364.57 - 367.96) ms-0.9%
process.time_to_main_ms436.31 ± (435.43 - 437.18) ms431.91 ± (431.26 - 432.55) ms-1.0%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed47.93 ± (47.90 - 47.96) MB47.91 ± (47.88 - 47.94) MB-0.0%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.3%✅⬆️
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 (7853) - mean (77ms)  : 71, 84
    master - mean (77ms)  : 70, 84

    section Bailout
    This PR (7853) - mean (82ms)  : 73, 90
    master - mean (82ms)  : 75, 88

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (1,100ms)  : 996, 1203
    master - mean (1,096ms)  : 989, 1204

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 (7853) - mean (121ms)  : 110, 132
    master - mean (120ms)  : 111, 128

    section Bailout
    This PR (7853) - mean (122ms)  : 112, 131
    master - mean (122ms)  : 112, 133

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (780ms)  : 723, 837
    master - mean (771ms)  : 732, 809

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7853) - mean (109ms)  : 99, 118
    master - mean (107ms)  : 100, 115

    section Bailout
    This PR (7853) - mean (110ms)  : 102, 119
    master - mean (107ms)  : 99, 115

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (725ms)  : 680, 770
    master - mean (716ms)  : 660, 772

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7853) - mean (107ms)  : 97, 118
    master - mean (107ms)  : 98, 115

    section Bailout
    This PR (7853) - mean (110ms)  : 100, 119
    master - mean (106ms)  : 99, 114

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (699ms)  : 667, 732
    master - mean (705ms)  : 663, 748

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 (7853) - mean (195ms)  : 191, 199
    master - mean (195ms)  : 190, 199

    section Bailout
    This PR (7853) - mean (198ms)  : 196, 200
    master - mean (198ms)  : 195, 200

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (1,126ms)  : 1051, 1201
    master - mean (1,132ms)  : 1048, 1216

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 (7853) - mean (280ms)  : 275, 285
    master - mean (283ms)  : 271, 295

    section Bailout
    This PR (7853) - mean (280ms)  : 276, 284
    master - mean (284ms)  : 274, 293

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (922ms)  : 875, 968
    master - mean (922ms)  : 872, 972

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

    section Bailout
    This PR (7853) - mean (274ms)  : 267, 280
    master - mean (276ms)  : 266, 286

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (895ms)  : 849, 941
    master - mean (900ms)  : 853, 947

Loading
HttpMessageHandler (.NET 8)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7853) - mean (270ms)  : 266, 274
    master - mean (274ms)  : 266, 283

    section Bailout
    This PR (7853) - mean (271ms)  : 267, 276
    master - mean (272ms)  : 267, 276

    section CallTarget+Inlining+NGEN
    This PR (7853) - mean (829ms)  : 807, 851
    master - mean (839ms)  : 801, 877

Loading

{
_dataflow = dataflow;
}
return aspectsLength;
Copy link
Member

Choose a reason for hiding this comment

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

If _dataflow != null for some reason, then we wont "save" the dataflow values, and we might return the wrong number of aspectsLength here, right? 🤔

It seems like we should probably move this check right to the top of the method and/or ensure can't be non-null when this method is called?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Agree. On it

@daniel-romano-DD daniel-romano-DD marked this pull request as ready for review November 24, 2025 15:24
@daniel-romano-DD daniel-romano-DD requested review from a team as code owners November 24, 2025 15:24
@daniel-romano-DD daniel-romano-DD merged commit c43abbb into master Nov 27, 2025
151 checks passed
@daniel-romano-DD daniel-romano-DD deleted the dani/iast/dataflow_sync_fix branch November 27, 2025 09:27
@github-actions github-actions bot added this to the vNext-v3 milestone Nov 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants