A new Sampling Profiler version 23.3.6 is available, this version adds support for dynamic code, such as for Just-In-Time compilation.
This allows declaring dynamic code blocks to the profiler, so they can be reported as something more meaningful than a bunch of question marks ‘???’.
In practice, there are two new commands you can pass with OutputDebugString. (more…)
SamplingProfiler has a few options to help profile a multi-threaded application which I’ll go over here.
In the current version, those options allow identifying CPU-related bottlenecks, as in “threads taking too much CPU resources or execution time”. However, they do not provide much clues yet to pinpoint bottlenecks arising from thread synchronization issues or serialization (insufficient parallelism). Hopefully, more support for profiling multi-threaded applications will come in future versions.
One issue when trying to profile a “live” application is that you may be getting a lot of noise, resulting from a particular library or section of code being executed from multiple contexts.
You may also be after profiling only one particular case, and want some reproducibility between runs… in short: you want a finer grained control on when or for what the profiling will take place.