Skip to content

Conversation

@bouwkast
Copy link
Collaborator

@bouwkast bouwkast commented Oct 29, 2025

Summary of changes

Migrates Postgres/Npgsql integration tests from docker-compose to TestContainers.
Disposes / spins down TestContainers after their tests run.

Reason for change

CI is constantly hitting docker issues which seems to be stemming from how many various containers we are running.
This implements the disposal logic for TestContainers when their tests are finished.
Swapped NpgSql/Postgres to be TestContainers as I thought it would be a good simple test, but it was a pain due to the various IAST tests that seemingly use it 🤷

Implementation details

Test coverage

Other details

Note: generated /assisted with Claude Code

@bouwkast bouwkast added the AI Generated Largely based on code generated by an AI or LLM. This label is the same across all dd-trace-* repos label Oct 29, 2025
@bouwkast
Copy link
Collaborator Author

@codex review

Copy link

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

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

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

@bouwkast
Copy link
Collaborator Author

@codex review

Copy link

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

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

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

Comment on lines 1320 to 1335
SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development");
SetEnvironmentVariable(ConfigurationKeys.AppSec.StackTraceEnabled, "false");
UseNativeLibraryAlpineWorkaround();

if (postgresFixture != null)
{
ConfigureContainers(postgresFixture);
}

Choose a reason for hiding this comment

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

P1 Badge Postgres Testcontainer never configured in AspNetCore5 IAST tests

As with the .NET Core 2 suite, the new constructor only configures Postgres when a fixture instance is supplied, but the legacy overload at lines 1311‑1313 still calls the new constructor with null and derived classes were left unchanged. After removing Postgres from docker-compose.yml, the tests spin up a Postgres Testcontainer yet the application keeps the default localhost:5432 settings, so database-dependent IAST tests cannot connect. Inject the PostgresFixture into derived constructors and forward it to ConfigureContainers.

Useful? React with 👍 / 👎.

@pr-commenter
Copy link

pr-commenter bot commented Oct 29, 2025

Benchmarks

Benchmarks Report for benchmark platform 🐌

Benchmarks for #7741 compared to master:

  • 1 benchmarks are faster, with geometric mean 2.076
  • 2 benchmarks are slower, with geometric mean 1.637
  • 4 benchmarks have fewer allocations
  • 7 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 ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.ActivityBenchmark.StartStopWithChild‑net472 6.09 KB 5.99 KB -99 B -1.63%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StartStopWithChild net6.0 11.1μs 36.7ns 142ns 0 0 0 5.51 KB
master StartStopWithChild netcoreapp3.1 13.4μs 69.2ns 360ns 0 0 0 5.7 KB
master StartStopWithChild net472 22.1μs 120ns 697ns 1.07 0.32 0.107 6.09 KB
#7741 StartStopWithChild net6.0 10.9μs 59.3ns 351ns 0 0 0 5.53 KB
#7741 StartStopWithChild netcoreapp3.1 13.9μs 71.5ns 328ns 0 0 0 5.7 KB
#7741 StartStopWithChild net472 22.5μs 127ns 813ns 1.05 0.418 0.105 5.99 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 942μs 288ns 1.12μs 0 0 0 2.71 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 1.02ms 210ns 812ns 0 0 0 2.7 KB
master WriteAndFlushEnrichedTraces net472 1.2ms 37.3ns 135ns 0 0 0 3.31 KB
#7741 WriteAndFlushEnrichedTraces net6.0 935μs 201ns 779ns 0 0 0 2.71 KB
#7741 WriteAndFlushEnrichedTraces netcoreapp3.1 1.04ms 449ns 1.68μs 0 0 0 2.7 KB
#7741 WriteAndFlushEnrichedTraces net472 1.2ms 883ns 3.31μs 0 0 0 3.31 KB
Benchmarks.Trace.Asm.AppSecBodyBenchmark - Unknown 🤷 Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master AllCycleSimpleBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleSimpleBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleSimpleBody net472 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleMoreComplexBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleMoreComplexBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
master AllCycleMoreComplexBody net472 N/A N/A N/A NaN NaN NaN 0 b
master ObjectExtractorSimpleBody net6.0 315ns 1.8ns 13.1ns 0 0 0 280 B
master ObjectExtractorSimpleBody netcoreapp3.1 415ns 2.23ns 12ns 0 0 0 272 B
master ObjectExtractorSimpleBody net472 296ns 0.0431ns 0.167ns 0.0433 0 0 281 B
master ObjectExtractorMoreComplexBody net6.0 6.24μs 30.4ns 129ns 0 0 0 3.78 KB
master ObjectExtractorMoreComplexBody netcoreapp3.1 7.79μs 37.2ns 158ns 0 0 0 3.69 KB
master ObjectExtractorMoreComplexBody net472 6.64μs 4.22ns 16.3ns 0.596 0 0 3.8 KB
#7741 AllCycleSimpleBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleSimpleBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleSimpleBody net472 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleMoreComplexBody net6.0 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleMoreComplexBody netcoreapp3.1 N/A N/A N/A NaN NaN NaN 0 b
#7741 AllCycleMoreComplexBody net472 N/A N/A N/A NaN NaN NaN 0 b
#7741 ObjectExtractorSimpleBody net6.0 319ns 1.51ns 6.24ns 0 0 0 280 B
#7741 ObjectExtractorSimpleBody netcoreapp3.1 403ns 2.25ns 14ns 0 0 0 272 B
#7741 ObjectExtractorSimpleBody net472 298ns 0.0387ns 0.139ns 0.0434 0 0 281 B
#7741 ObjectExtractorMoreComplexBody net6.0 6.33μs 33.1ns 155ns 0 0 0 3.78 KB
#7741 ObjectExtractorMoreComplexBody netcoreapp3.1 7.73μs 36.3ns 145ns 0 0 0 3.69 KB
#7741 ObjectExtractorMoreComplexBody net472 6.61μs 1.85ns 6.91ns 0.598 0 0 3.8 KB
Benchmarks.Trace.Asm.AppSecEncoderBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Asm.AppSecEncoderBenchmark.EncodeLegacyArgs‑net472 2.16 KB 2.17 KB 13 B 0.60%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EncodeArgs net6.0 77.1μs 247ns 923ns 0 0 0 32.4 KB
master EncodeArgs netcoreapp3.1 97.1μs 270ns 973ns 0 0 0 32.4 KB
master EncodeArgs net472 112μs 14.1ns 54.5ns 5.05 0 0 32.51 KB
master EncodeLegacyArgs net6.0 141μs 14.7ns 56.9ns 0 0 0 2.15 KB
master EncodeLegacyArgs netcoreapp3.1 199μs 589ns 2.28μs 0 0 0 2.14 KB
master EncodeLegacyArgs net472 264μs 91.4ns 342ns 0 0 0 2.16 KB
#7741 EncodeArgs net6.0 77.2μs 204ns 788ns 0 0 0 32.4 KB
#7741 EncodeArgs netcoreapp3.1 96.7μs 251ns 971ns 0 0 0 32.4 KB
#7741 EncodeArgs net472 111μs 34.1ns 132ns 4.99 0 0 32.51 KB
#7741 EncodeLegacyArgs net6.0 145μs 39.4ns 142ns 0 0 0 2.14 KB
#7741 EncodeLegacyArgs netcoreapp3.1 199μs 208ns 807ns 0 0 0 2.14 KB
#7741 EncodeLegacyArgs net472 269μs 42.8ns 160ns 0 0 0 2.17 KB
Benchmarks.Trace.Asm.AppSecWafBenchmark - Slower ⚠️ Same allocations ✔️

Slower ⚠️ in #7741

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmarkWithAttack‑netcoreapp3.1 2.388 302,738.03 722,940.55 several?

Faster 🎉 in #7741

Benchmark base/diff Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.Asm.AppSecWafBenchmark.RunWafRealisticBenchmark‑netcoreapp3.1 2.076 863,571.46 415,935.83

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master RunWafRealisticBenchmark net6.0 395μs 111ns 401ns 0 0 0 4.56 KB
master RunWafRealisticBenchmark netcoreapp3.1 824μs 12.8μs 127μs 0 0 0 4.48 KB
master RunWafRealisticBenchmark net472 428μs 63ns 244ns 0 0 0 4.66 KB
master RunWafRealisticBenchmarkWithAttack net6.0 285μs 49.3ns 185ns 0 0 0 2.24 KB
master RunWafRealisticBenchmarkWithAttack netcoreapp3.1 303μs 133ns 496ns 0 0 0 2.22 KB
master RunWafRealisticBenchmarkWithAttack net472 309μs 45ns 174ns 0 0 0 2.29 KB
#7741 RunWafRealisticBenchmark net6.0 392μs 128ns 496ns 0 0 0 4.55 KB
#7741 RunWafRealisticBenchmark netcoreapp3.1 418μs 890ns 3.21μs 0 0 0 4.48 KB
#7741 RunWafRealisticBenchmark net472 430μs 89.8ns 336ns 0 0 0 4.66 KB
#7741 RunWafRealisticBenchmarkWithAttack net6.0 283μs 43.4ns 168ns 0 0 0 2.24 KB
#7741 RunWafRealisticBenchmarkWithAttack netcoreapp3.1 608μs 19.1μs 191μs 0 0 0 2.22 KB
#7741 RunWafRealisticBenchmarkWithAttack net472 308μs 41.3ns 160ns 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.5μs 28.7ns 103ns 0 0 0 14.52 KB
master SendRequest netcoreapp3.1 73.3μs 370ns 1.57μs 0 0 0 17.42 KB
master SendRequest net472 0.00229ns 0.00138ns 0.00536ns 0 0 0 0 b
#7741 SendRequest net6.0 61.1μs 34.8ns 125ns 0 0 0 14.52 KB
#7741 SendRequest netcoreapp3.1 72.1μs 117ns 452ns 0 0 0 17.42 KB
#7741 SendRequest net472 0.00273ns 0.00134ns 0.00518ns 0 0 0 0 b
Benchmarks.Trace.CharSliceBenchmark - Same speed ✔️ Fewer allocations 🎉

Fewer allocations 🎉 in #7741

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

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master OriginalCharSlice net6.0 2.03ms 2.52μs 9.75μs 0 0 0 640.01 KB
master OriginalCharSlice netcoreapp3.1 2.08ms 6.3μs 24.4μs 0 0 0 640 KB
master OriginalCharSlice net472 2.7ms 94.9ns 342ns 100 0 0 641.95 KB
master OptimizedCharSlice net6.0 1.42ms 113ns 409ns 0 0 0 7 B
master OptimizedCharSlice netcoreapp3.1 1.67ms 417ns 1.61μs 0 0 0 1 B
master OptimizedCharSlice net472 1.95ms 530ns 2.05μs 0 0 0 73 B
master OptimizedCharSliceWithPool net6.0 846μs 41.7ns 156ns 0 0 0 3 B
master OptimizedCharSliceWithPool netcoreapp3.1 829μs 94.3ns 365ns 0 0 0 1 B
master OptimizedCharSliceWithPool net472 1.2ms 184ns 712ns 0 0 0 48 B
#7741 OriginalCharSlice net6.0 1.87ms 6.05μs 23.4μs 0 0 0 640.01 KB
#7741 OriginalCharSlice netcoreapp3.1 2.17ms 6.78μs 25.4μs 0 0 0 640 KB
#7741 OriginalCharSlice net472 2.62ms 1.41μs 5.26μs 100 0 0 641.95 KB
#7741 OptimizedCharSlice net6.0 1.39ms 204ns 789ns 0 0 0 7 B
#7741 OptimizedCharSlice netcoreapp3.1 1.84ms 360ns 1.39μs 0 0 0 1 B
#7741 OptimizedCharSlice net472 1.98ms 755ns 2.92μs 0 0 0 73 B
#7741 OptimizedCharSliceWithPool net6.0 828μs 38.3ns 143ns 0 0 0 3 B
#7741 OptimizedCharSliceWithPool netcoreapp3.1 812μs 26.9ns 101ns 0 0 0 0 b
#7741 OptimizedCharSliceWithPool net472 1.17ms 165ns 640ns 0 0 0 47 B
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark - Slower ⚠️ More allocations ⚠️

Slower ⚠️ in #7741

Benchmark diff/base Base Median (ns) Diff Median (ns) Modality
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net6.0 1.123 644,683.59 723,677.08

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.CIVisibilityProtocolWriterBenchmark.WriteAndFlushEnrichedTraces‑net472 55.61 KB 56.39 KB 779 B 1.40%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master WriteAndFlushEnrichedTraces net6.0 645μs 601ns 2.33μs 0 0 0 41.78 KB
master WriteAndFlushEnrichedTraces netcoreapp3.1 712μs 3.87μs 20.9μs 0 0 0 42.05 KB
master WriteAndFlushEnrichedTraces net472 896μs 3.34μs 12.5μs 4.46 0 0 55.61 KB
#7741 WriteAndFlushEnrichedTraces net6.0 730μs 2.95μs 11.4μs 0 0 0 41.87 KB
#7741 WriteAndFlushEnrichedTraces netcoreapp3.1 703μs 3.84μs 22.7μs 0 0 0 41.93 KB
#7741 WriteAndFlushEnrichedTraces net472 902μs 1.42μs 6.18μs 8.33 0 0 56.39 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.87μs 3.3ns 12.8ns 0 0 0 1.02 KB
master ExecuteNonQuery netcoreapp3.1 2.68μs 9.23ns 35.7ns 0 0 0 1.02 KB
master ExecuteNonQuery net472 2.8μs 4.94ns 19.1ns 0.156 0.0142 0 987 B
#7741 ExecuteNonQuery net6.0 1.85μs 8.61ns 31ns 0 0 0 1.02 KB
#7741 ExecuteNonQuery netcoreapp3.1 2.76μs 5.86ns 21.1ns 0 0 0 1.02 KB
#7741 ExecuteNonQuery net472 2.84μs 6.19ns 21.5ns 0.154 0.014 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.69μs 9.07ns 49.7ns 0 0 0 1.03 KB
master CallElasticsearch netcoreapp3.1 2.18μs 11.4ns 53.5ns 0 0 0 1.03 KB
master CallElasticsearch net472 3.58μs 4.16ns 16.1ns 0.161 0 0 1.04 KB
master CallElasticsearchAsync net6.0 1.83μs 1.99ns 7.72ns 0 0 0 1.01 KB
master CallElasticsearchAsync netcoreapp3.1 2.35μs 11.9ns 47.5ns 0 0 0 1.08 KB
master CallElasticsearchAsync net472 3.59μs 2.1ns 7.87ns 0.161 0 0 1.1 KB
#7741 CallElasticsearch net6.0 1.78μs 2.29ns 8.55ns 0 0 0 1.03 KB
#7741 CallElasticsearch netcoreapp3.1 2.18μs 9.07ns 35.1ns 0 0 0 1.03 KB
#7741 CallElasticsearch net472 3.55μs 1.93ns 7.46ns 0.16 0 0 1.04 KB
#7741 CallElasticsearchAsync net6.0 1.84μs 8.3ns 32.1ns 0 0 0 1.01 KB
#7741 CallElasticsearchAsync netcoreapp3.1 2.33μs 9.86ns 38.2ns 0 0 0 1.08 KB
#7741 CallElasticsearchAsync net472 3.65μs 3.74ns 13.5ns 0.164 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.83μs 8.88ns 35.5ns 0 0 0 952 B
master ExecuteAsync netcoreapp3.1 2.58μs 5.79ns 22.4ns 0 0 0 952 B
master ExecuteAsync net472 2.6μs 6.41ns 24.8ns 0.142 0 0 915 B
#7741 ExecuteAsync net6.0 1.84μs 4.04ns 15.6ns 0 0 0 952 B
#7741 ExecuteAsync netcoreapp3.1 2.46μs 2.72ns 10.5ns 0 0 0 952 B
#7741 ExecuteAsync net472 2.54μs 2.48ns 8.61ns 0.14 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.95μs 12.7ns 47.4ns 0 0 0 2.36 KB
master SendAsync netcoreapp3.1 8.7μs 31.4ns 122ns 0 0 0 2.9 KB
master SendAsync net472 12.4μs 6.52ns 25.2ns 0.492 0 0 3.18 KB
#7741 SendAsync net6.0 6.8μs 13.9ns 50.2ns 0 0 0 2.36 KB
#7741 SendAsync netcoreapp3.1 8.41μs 26.6ns 103ns 0 0 0 2.9 KB
#7741 SendAsync net472 12.4μs 9.74ns 37.7ns 0.492 0 0 3.18 KB
Benchmarks.Trace.Iast.StringAspectsBenchmark - Same speed ✔️ More allocations ⚠️

More allocations ⚠️ in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net472 57.34 KB 65.54 KB 8.19 KB 14.29%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net6.0 258.03 KB 279.34 KB 21.31 KB 8.26%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑netcoreapp3.1 42.78 KB 45.54 KB 2.75 KB 6.43%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑net472 278.53 KB 286.72 KB 8.19 KB 2.94%
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatBenchmark‑net6.0 43.44 KB 44.1 KB 656 B 1.51%

Fewer allocations 🎉 in #7741

Benchmark Base Allocated Diff Allocated Change Change %
Benchmarks.Trace.Iast.StringAspectsBenchmark.StringConcatAspectBenchmark‑netcoreapp3.1 273.05 KB 251.97 KB -21.08 KB -7.72%

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master StringConcatBenchmark net6.0 45μs 257ns 1.93μs 0 0 0 43.44 KB
master StringConcatBenchmark netcoreapp3.1 53μs 545ns 5.11μs 0 0 0 42.78 KB
master StringConcatBenchmark net472 57.3μs 308ns 1.57μs 0 0 0 57.34 KB
master StringConcatAspectBenchmark net6.0 455μs 2.23μs 9.96μs 0 0 0 258.03 KB
master StringConcatAspectBenchmark netcoreapp3.1 521μs 2.26μs 8.46μs 0 0 0 273.05 KB
master StringConcatAspectBenchmark net472 406μs 2.23μs 12.6μs 0 0 0 278.53 KB
#7741 StringConcatBenchmark net6.0 42μs 238ns 1.65μs 0 0 0 44.1 KB
#7741 StringConcatBenchmark netcoreapp3.1 51.4μs 569ns 5.55μs 0 0 0 45.54 KB
#7741 StringConcatBenchmark net472 58.1μs 210ns 812ns 0 0 0 65.54 KB
#7741 StringConcatAspectBenchmark net6.0 476μs 2.16μs 7.79μs 0 0 0 279.34 KB
#7741 StringConcatAspectBenchmark netcoreapp3.1 519μs 1.29μs 4.65μs 0 0 0 251.97 KB
#7741 StringConcatAspectBenchmark net472 396μs 1.42μs 5.12μs 0 0 0 286.72 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.66μs 0.541ns 2.02ns 0 0 0 1.7 KB
master EnrichedLog netcoreapp3.1 3.53μs 17.1ns 72.7ns 0 0 0 1.7 KB
master EnrichedLog net472 4.05μs 4.5ns 17.4ns 0.243 0 0 1.64 KB
#7741 EnrichedLog net6.0 2.73μs 11.8ns 44.3ns 0 0 0 1.7 KB
#7741 EnrichedLog netcoreapp3.1 3.74μs 17.5ns 70.2ns 0 0 0 1.7 KB
#7741 EnrichedLog net472 3.99μs 2.81ns 10.1ns 0.241 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 124μs 80.5ns 312ns 0 0 0 4.31 KB
master EnrichedLog netcoreapp3.1 127μs 68.5ns 256ns 0 0 0 4.31 KB
master EnrichedLog net472 170μs 193ns 746ns 0 0 0 4.52 KB
#7741 EnrichedLog net6.0 125μs 204ns 736ns 0 0 0 4.31 KB
#7741 EnrichedLog netcoreapp3.1 131μs 303ns 1.18μs 0 0 0 4.31 KB
#7741 EnrichedLog net472 171μs 241ns 933ns 0 0 0 4.52 KB
Benchmarks.Trace.NLogBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master EnrichedLog net6.0 5.02μs 13.3ns 51.4ns 0 0 0 2.26 KB
master EnrichedLog netcoreapp3.1 6.69μs 22.2ns 85.9ns 0 0 0 2.26 KB
master EnrichedLog net472 7.75μs 8.73ns 33.8ns 0.31 0 0 2.08 KB
#7741 EnrichedLog net6.0 5.01μs 5.36ns 20.8ns 0 0 0 2.26 KB
#7741 EnrichedLog netcoreapp3.1 6.78μs 23.7ns 91.7ns 0 0 0 2.26 KB
#7741 EnrichedLog net472 7.54μs 9.29ns 36ns 0.303 0 0 2.08 KB
Benchmarks.Trace.RedisBenchmark - Same speed ✔️ Same allocations ✔️

Raw results

Branch Method Toolchain Mean StdError StdDev Gen 0 Gen 1 Gen 2 Allocated
master SendReceive net6.0 2.02μs 5.79ns 22.4ns 0 0 0 1.2 KB
master SendReceive netcoreapp3.1 2.62μs 9.68ns 37.5ns 0 0 0 1.2 KB
master SendReceive net472 3.1μs 1.91ns 7.39ns 0.185 0 0 1.2 KB
#7741 SendReceive net6.0 2.03μs 9.95ns 39.8ns 0 0 0 1.2 KB
#7741 SendReceive netcoreapp3.1 2.66μs 10.7ns 41.3ns 0 0 0 1.2 KB
#7741 SendReceive net472 3.26μs 4.12ns 16ns 0.179 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.23μs 5.67ns 22ns 0 0 0 1.58 KB
master EnrichedLog netcoreapp3.1 5.53μs 12.5ns 48.2ns 0 0 0 1.63 KB
master EnrichedLog net472 6.39μs 6.69ns 25ns 0.32 0 0 2.03 KB
#7741 EnrichedLog net6.0 4.34μs 2.09ns 7.54ns 0 0 0 1.58 KB
#7741 EnrichedLog netcoreapp3.1 5.64μs 12.3ns 47.8ns 0 0 0 1.63 KB
#7741 EnrichedLog net472 6.84μs 10.1ns 39ns 0.306 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 763ns 3.94ns 19.3ns 0 0 0 576 B
master StartFinishSpan netcoreapp3.1 967ns 4.88ns 21.3ns 0 0 0 576 B
master StartFinishSpan net472 955ns 0.17ns 0.636ns 0.0909 0 0 578 B
master StartFinishScope net6.0 905ns 4.64ns 20.7ns 0 0 0 696 B
master StartFinishScope netcoreapp3.1 1.19μs 6.4ns 34.5ns 0 0 0 696 B
master StartFinishScope net472 1.14μs 0.463ns 1.79ns 0.103 0 0 658 B
#7741 StartFinishSpan net6.0 794ns 0.191ns 0.738ns 0 0 0 576 B
#7741 StartFinishSpan netcoreapp3.1 969ns 5.16ns 25.8ns 0 0 0 576 B
#7741 StartFinishSpan net472 968ns 0.483ns 1.87ns 0.0876 0 0 578 B
#7741 StartFinishScope net6.0 915ns 3.99ns 15.5ns 0 0 0 696 B
#7741 StartFinishScope netcoreapp3.1 1.22μs 5.93ns 25.2ns 0 0 0 696 B
#7741 StartFinishScope net472 1.14μs 0.131ns 0.49ns 0.103 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.06μs 0.909ns 3.15ns 0 0 0 696 B
master RunOnMethodBegin netcoreapp3.1 1.42μs 6.95ns 29.5ns 0 0 0 696 B
master RunOnMethodBegin net472 1.45μs 2.29ns 8.86ns 0.101 0 0 658 B
#7741 RunOnMethodBegin net6.0 1.07μs 5.15ns 20.6ns 0 0 0 696 B
#7741 RunOnMethodBegin netcoreapp3.1 1.41μs 6.93ns 28.6ns 0 0 0 696 B
#7741 RunOnMethodBegin net472 1.49μs 1.27ns 4.92ns 0.104 0 0 658 B

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

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

Execution-Time Benchmarks Report ⏱️

Execution-time results for samples comparing This PR (7741) 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
duration69.25 ± (69.23 - 69.50) ms69.23 ± (69.19 - 69.50) ms-0.0%
.NET Framework 4.8 - Bailout
duration73.35 ± (73.25 - 73.52) ms73.54 ± (73.53 - 73.89) ms+0.3%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1054.10 ± (1055.85 - 1063.04) ms1051.94 ± (1052.47 - 1058.22) ms-0.2%
.NET Core 3.1 - Baseline
process.internal_duration_ms22.13 ± (22.10 - 22.16) ms22.17 ± (22.13 - 22.21) ms+0.2%✅⬆️
process.time_to_main_ms80.53 ± (80.36 - 80.70) ms80.57 ± (80.39 - 80.76) ms+0.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.90 ± (10.89 - 10.90) MB10.86 ± (10.85 - 10.86) MB-0.4%
runtime.dotnet.threads.count12 ± (12 - 12)12 ± (12 - 12)+0.0%
.NET Core 3.1 - Bailout
process.internal_duration_ms22.10 ± (22.07 - 22.13) ms22.11 ± (22.07 - 22.14) ms+0.0%✅⬆️
process.time_to_main_ms81.57 ± (81.42 - 81.72) ms82.07 ± (81.88 - 82.26) ms+0.6%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.92 ± (10.91 - 10.92) MB10.89 ± (10.89 - 10.90) MB-0.2%
runtime.dotnet.threads.count13 ± (13 - 13)13 ± (13 - 13)+0.0%
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms212.55 ± (211.18 - 213.93) ms211.51 ± (210.14 - 212.88) ms-0.5%
process.time_to_main_ms519.81 ± (519.07 - 520.55) ms517.72 ± (516.81 - 518.63) ms-0.4%
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed52.73 ± (52.71 - 52.75) MB52.44 ± (52.43 - 52.46) MB-0.5%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%
.NET 6 - Baseline
process.internal_duration_ms20.99 ± (20.96 - 21.02) ms21.60 ± (21.56 - 21.64) ms+2.9%✅⬆️
process.time_to_main_ms69.62 ± (69.49 - 69.76) ms74.04 ± (73.88 - 74.19) ms+6.3%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.59 ± (10.59 - 10.60) MB10.61 ± (10.61 - 10.61) MB+0.2%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 6 - Bailout
process.internal_duration_ms20.98 ± (20.95 - 21.01) ms21.29 ± (21.25 - 21.33) ms+1.5%✅⬆️
process.time_to_main_ms70.51 ± (70.42 - 70.60) ms73.42 ± (73.15 - 73.69) ms+4.1%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed10.63 ± (10.63 - 10.64) MB10.66 ± (10.66 - 10.66) MB+0.2%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms201.02 ± (198.77 - 203.27) ms205.00 ± (202.53 - 207.48) ms+2.0%✅⬆️
process.time_to_main_ms490.32 ± (489.65 - 490.98) ms492.60 ± (491.66 - 493.54) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed51.73 ± (51.67 - 51.79) MB51.42 ± (51.36 - 51.48) MB-0.6%
runtime.dotnet.threads.count28 ± (28 - 28)28 ± (28 - 28)+0.0%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms19.10 ± (19.06 - 19.13) ms19.43 ± (19.39 - 19.47) ms+1.8%✅⬆️
process.time_to_main_ms69.83 ± (69.68 - 69.98) ms71.81 ± (71.65 - 71.97) ms+2.8%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.63 ± (7.62 - 7.63) MB7.65 ± (7.64 - 7.65) MB+0.2%✅⬆️
runtime.dotnet.threads.count10 ± (10 - 10)10 ± (10 - 10)+0.0%
.NET 8 - Bailout
process.internal_duration_ms19.12 ± (19.09 - 19.15) ms19.35 ± (19.32 - 19.38) ms+1.2%✅⬆️
process.time_to_main_ms70.85 ± (70.76 - 70.95) ms72.65 ± (72.51 - 72.78) ms+2.5%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed7.67 ± (7.66 - 7.68) MB7.69 ± (7.69 - 7.70) MB+0.3%✅⬆️
runtime.dotnet.threads.count11 ± (11 - 11)11 ± (11 - 11)+0.0%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms179.07 ± (178.18 - 179.97) ms184.65 ± (183.86 - 185.44) ms+3.1%✅⬆️
process.time_to_main_ms464.04 ± (463.51 - 464.56) ms472.62 ± (471.52 - 473.73) ms+1.8%✅⬆️
runtime.dotnet.exceptions.count0 ± (0 - 0)0 ± (0 - 0)+0.0%
runtime.dotnet.mem.committed38.88 ± (38.85 - 38.91) MB38.49 ± (38.46 - 38.52) MB-1.0%
runtime.dotnet.threads.count27 ± (27 - 27)27 ± (27 - 27)-0.4%

HttpMessageHandler

Metric Master (Mean ± 95% CI) Current (Mean ± 95% CI) Change Status
.NET Framework 4.8 - Baseline
duration193.59 ± (193.36 - 194.28) ms192.07 ± (192.34 - 193.21) ms-0.8%
.NET Framework 4.8 - Bailout
duration195.88 ± (195.78 - 196.32) ms196.10 ± (195.95 - 196.48) ms+0.1%✅⬆️
.NET Framework 4.8 - CallTarget+Inlining+NGEN
duration1163.32 ± (1167.79 - 1177.12) ms1163.36 ± (1169.06 - 1178.97) ms+0.0%✅⬆️
.NET Core 3.1 - Baseline
process.internal_duration_ms187.88 ± (187.54 - 188.21) ms187.51 ± (187.21 - 187.81) ms-0.2%
process.time_to_main_ms81.09 ± (80.88 - 81.30) ms80.74 ± (80.53 - 80.95) ms-0.4%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.10 ± (16.07 - 16.13) MB16.06 ± (16.03 - 16.09) MB-0.2%
runtime.dotnet.threads.count20 ± (20 - 20)20 ± (20 - 20)-0.4%
.NET Core 3.1 - Bailout
process.internal_duration_ms188.04 ± (187.55 - 188.52) ms187.26 ± (186.97 - 187.55) ms-0.4%
process.time_to_main_ms82.85 ± (82.66 - 83.05) ms82.08 ± (81.90 - 82.26) ms-0.9%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed16.13 ± (16.11 - 16.16) MB16.13 ± (16.10 - 16.16) MB+0.0%✅⬆️
runtime.dotnet.threads.count21 ± (20 - 21)21 ± (21 - 21)+0.2%✅⬆️
.NET Core 3.1 - CallTarget+Inlining+NGEN
process.internal_duration_ms396.38 ± (393.98 - 398.77) ms400.01 ± (397.19 - 402.84) ms+0.9%✅⬆️
process.time_to_main_ms518.75 ± (518.11 - 519.40) ms515.67 ± (514.98 - 516.35) ms-0.6%
runtime.dotnet.exceptions.count3 ± (3 - 3)3 ± (3 - 3)+0.0%
runtime.dotnet.mem.committed63.17 ± (63.02 - 63.32) MB63.05 ± (62.91 - 63.19) MB-0.2%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)+0.0%✅⬆️
.NET 6 - Baseline
process.internal_duration_ms191.08 ± (190.81 - 191.35) ms191.42 ± (191.12 - 191.72) ms+0.2%✅⬆️
process.time_to_main_ms69.75 ± (69.60 - 69.90) ms69.73 ± (69.58 - 69.87) ms-0.0%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.18 ± (16.06 - 16.30) MB16.05 ± (15.91 - 16.19) MB-0.8%
runtime.dotnet.threads.count19 ± (18 - 19)18 ± (18 - 18)-2.8%
.NET 6 - Bailout
process.internal_duration_ms190.82 ± (190.53 - 191.11) ms190.38 ± (190.06 - 190.70) ms-0.2%
process.time_to_main_ms70.79 ± (70.70 - 70.88) ms70.63 ± (70.52 - 70.73) ms-0.2%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed16.08 ± (15.93 - 16.23) MB16.05 ± (15.90 - 16.20) MB-0.1%
runtime.dotnet.threads.count19 ± (19 - 20)20 ± (19 - 20)+2.1%✅⬆️
.NET 6 - CallTarget+Inlining+NGEN
process.internal_duration_ms410.37 ± (407.60 - 413.14) ms410.19 ± (407.24 - 413.14) ms-0.0%
process.time_to_main_ms488.80 ± (488.18 - 489.42) ms483.61 ± (483.04 - 484.17) ms-1.1%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed62.43 ± (62.29 - 62.58) MB62.00 ± (61.86 - 62.14) MB-0.7%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 30)+0.1%✅⬆️
.NET 8 - Baseline
process.internal_duration_ms189.39 ± (189.16 - 189.63) ms189.83 ± (189.48 - 190.19) ms+0.2%✅⬆️
process.time_to_main_ms69.50 ± (69.35 - 69.66) ms69.77 ± (69.53 - 70.00) ms+0.4%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.79 ± (11.77 - 11.82) MB11.73 ± (11.70 - 11.76) MB-0.6%
runtime.dotnet.threads.count18 ± (18 - 18)18 ± (18 - 18)-0.3%
.NET 8 - Bailout
process.internal_duration_ms188.94 ± (188.74 - 189.13) ms189.20 ± (188.82 - 189.57) ms+0.1%✅⬆️
process.time_to_main_ms70.43 ± (70.33 - 70.52) ms70.79 ± (70.64 - 70.94) ms+0.5%✅⬆️
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed11.88 ± (11.85 - 11.91) MB11.83 ± (11.79 - 11.86) MB-0.4%
runtime.dotnet.threads.count19 ± (19 - 19)19 ± (19 - 19)-0.7%
.NET 8 - CallTarget+Inlining+NGEN
process.internal_duration_ms362.13 ± (360.41 - 363.84) ms361.87 ± (360.41 - 363.32) ms-0.1%
process.time_to_main_ms465.85 ± (465.05 - 466.65) ms461.22 ± (460.45 - 462.00) ms-1.0%
runtime.dotnet.exceptions.count4 ± (4 - 4)4 ± (4 - 4)+0.0%
runtime.dotnet.mem.committed50.54 ± (50.50 - 50.58) MB50.06 ± (50.03 - 50.10) MB-0.9%
runtime.dotnet.threads.count29 ± (29 - 29)29 ± (29 - 29)-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 (7741) - mean (69ms)  : 67, 71
    master - mean (69ms)  : 68, 71

    section Bailout
    This PR (7741) - mean (74ms)  : 72, 76
    master - mean (73ms)  : 72, 75

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (1,055ms)  : 1015, 1096
    master - mean (1,059ms)  : 1008, 1111

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 (7741) - mean (108ms)  : 106, 111
    master - mean (108ms)  : 105, 111

    section Bailout
    This PR (7741) - mean (110ms)  : 108, 112
    master - mean (109ms)  : 107, 111

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (767ms)  : 731, 803
    master - mean (764ms)  : 725, 802

Loading
FakeDbCommand (.NET 6)
gantt
    title Execution time (ms) FakeDbCommand (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7741) - mean (102ms)  : 100, 105
    master - mean (96ms)  : 93, 98

    section Bailout
    This PR (7741) - mean (101ms)  : 95, 107
    master - mean (97ms)  : 95, 98

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (738ms)  : 680, 796
    master - mean (722ms)  : 674, 770

Loading
FakeDbCommand (.NET 8)
gantt
    title Execution time (ms) FakeDbCommand (.NET 8)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7741) - mean (99ms)  : 96, 101
    master - mean (96ms)  : 94, 98

    section Bailout
    This PR (7741) - mean (100ms)  : 97, 103
    master - mean (97ms)  : 95, 98

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (700ms)  : 668, 731
    master - mean (670ms)  : 655, 685

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

    section Bailout
    This PR (7741) - mean (196ms)  : 194, 199
    master - mean (196ms)  : 194, 199

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (1,174ms)  : 1101, 1247
    master - mean (1,172ms)  : 1104, 1241

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 (7741) - mean (277ms)  : 273, 281
    master - mean (278ms)  : 273, 283

    section Bailout
    This PR (7741) - mean (278ms)  : 274, 282
    master - mean (279ms)  : 272, 286

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (954ms)  : 904, 1004
    master - mean (955ms)  : 917, 993

Loading
HttpMessageHandler (.NET 6)
gantt
    title Execution time (ms) HttpMessageHandler (.NET 6)
    dateFormat  x
    axisFormat %Q
    todayMarker off
    section Baseline
    This PR (7741) - mean (269ms)  : 264, 275
    master - mean (269ms)  : 265, 273

    section Bailout
    This PR (7741) - mean (269ms)  : 265, 273
    master - mean (270ms)  : 266, 273

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (928ms)  : 872, 983
    master - mean (935ms)  : 893, 977

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

    section Bailout
    This PR (7741) - mean (270ms)  : 265, 275
    master - mean (269ms)  : 266, 272

    section CallTarget+Inlining+NGEN
    This PR (7741) - mean (856ms)  : 836, 875
    master - mean (860ms)  : 838, 882

Loading

@datadog-official

This comment has been minimized.

@bouwkast bouwkast force-pushed the steven/test-containers branch 2 times, most recently from 20e778f to 57dadbd Compare October 31, 2025 11:52
bouwkast and others added 3 commits November 4, 2025 08:33
- Implement ContainersRegistry with reference counting for container lifecycle management
- Create PostgresFixture using DotNet.Testcontainers library
- Add ContainersCollection for xUnit collection-level disposal
- Migrate NpgsqlCommandTests, DapperTests, and IAST tests to use PostgresFixture
- Remove postgres service from docker-compose.yml as it's now managed by TestContainers
- Update test scrubbers to handle TestContainers dynamic IP addresses

This improves test isolation and reduces dependency on docker-compose for integration tests.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
I think there may be race conditions if we reuse containers.
@bouwkast bouwkast force-pushed the steven/test-containers branch from 6662a9b to 47386bf Compare November 4, 2025 13:34
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants