Quick answer: Use Deep Profile only to discover where time goes structurally, then switch it off and measure the real cost with a normal recording plus a few hand-placed ProfilerMarkers around the hot path.

Deep Profile is tempting because it shows every method, but it also adds overhead to every method, so a function that runs in microseconds can appear to dominate. The accurate numbers come from sampling mode with markers you place deliberately.

How to measure accurately

1. Understand what Deep Profile distorts

Deep Profile wraps every managed call in instrumentation, which can multiply frame time several times over. Use it to see the shape of the call tree, never to trust the absolute milliseconds.

2. Find the area in deep mode, then turn it off

Run Deep Profile once to identify which subsystem owns the time, disable it, and re-record normally. The normal recording gives you timings that match shipping behavior.

3. Place ProfilerMarkers on the hot path

Wrap the specific methods you care about in named ProfilerMarker blocks. These add almost no overhead and show up as precise rows you can trust, unlike blanket instrumentation.

4. Confirm against a real build

Profile a development build, not just the editor, since editor-only overhead (and Deep Profile) both inflate numbers. The build's sampling numbers are the ones that reflect what players experience.

Catching the ones you can't reproduce

The hardest version of this to fix is the one you can't reproduce — it only happens on a player's hardware, OS, driver, or save state, under conditions that simply aren't present on your machine. A report that says “it crashed” or “it froze” gives you nothing to act on, so the bug survives release after release while quietly costing you players.

Automatic error capture closes that gap. Each failure arrives with its full stack trace, the device and OS, the build number, and a breadcrumb trail of what the player did right before it broke, so even a failure you have never seen becomes a specific, reproducible issue. Fold identical failures into one signature ranked by how many players each hits, and your worklist sorts itself worst-first instead of arriving as a stream of vague complaints.

This is where a tool like Bugnet earns its place. Its SDK captures every Unity error automatically with the full stack trace plus device, OS, memory, build, and game-state context, folds duplicates into one grouped issue with an occurrence count, and ties each to the build it first appeared on — so you fix the problem that hurts the most players first and confirm it is gone when its signature disappears from the next release.

The errors you never hear about are the ones quietly costing you players. Visibility turns them into a worklist.