
1/9/2024 · Christophe Nasarre
What this post added
This post details the technical architecture and implementation choices behind Datadog's .NET profiler, which is designed for continuous operation in production. It covers the profiler's components (samplers, providers, aggregator, exporter), how samples are collected and aggregated into the .pprof format using Rust, and how profiles are associated with traces and spans on the backend using runtime IDs. It also explains the process of cleaning up .NET call stacks for better readability and discusses the decision to implement the profiler in native code (C++ and Rust) running in the same process as the profiled application, rather than using Microsoft's TraceEvent nuget.