I’m interested in a link to the project/steam store?
Where did you use Burst in your project and it proven to be needed for your projects requirements? and this was not obtainable in another way?
I think my frustration stems from the fact that most Unity API by itself is not performant, or accessible from Jobs/Burst.
And the current API available is bogus and performs bad because nobody in Unity seems to care about performance of their CS code or math library.
Performance by Default? lies.
As example take the simple case of you want to run a raycast. We all know that mono does not inline… and that mono is slow with method calls cause it looses context and cache. and that calls to native are heavy. SO lets see what it does.
Will you come on this journey with me?
public static int RaycastNonAlloc(Vector3 origin, Vector3 direction, RaycastHit[] results, [DefaultValue("Mathf.Infinity")] float maxDistance, [DefaultValue("DefaultRaycastLayers")] int layerMask, [DefaultValue("QueryTriggerInteraction.UseGlobal")] QueryTriggerInteraction queryTriggerInteraction)
{
return Physics.defaultPhysicsScene.Raycast(origin, direction, results, maxDistance, layerMask, queryTriggerInteraction);
}
- So Physics.defaultPhysicScene is a Method call, and it does a call to native of getting the current/default physics scene.
- Raycast is a call.
Lets look on!
return (double) direction.magnitude > 1.40129846432482E-45 ? PhysicsScene.Internal_RaycastNonAlloc(this, new Ray(origin, direction.normalized), raycastHits, maxDistance, layerMask, queryTriggerInteraction) : 0;
- direction.magnitude is a method call. it does:
return Mathf.Sqrt((float) ((double) this.x * (double) this.x + (double) this.y * (double) this.y + (double) this.z * (double) this.z));
- mathf.Sqrt is simply a return float casted double Math.Sqrt
- Math.Sqrt in itself is a method call > to native instrinct
- Then we do Create new Ray Struct. we pass it a direction.normalized. that is a method call!
lets look at it!
get { return Vector3.Normalize(this); }
- yeah that is another one…
float num = Vector3.Magnitude(value);
return (double) num > 9.99999974737875E-06 ? value / num : Vector3.zero;
10!. Hey how cool, we do a Magnitude again. so lets add 3
11 or 12. If returning Vector3.zero it is a method call. ({get return zeroVector} else if value/num we get. function call to operator overload of / which is return new Vector3(a.x / d, a.y / d, a.z / d); another method call 
13. new Ray == methodcall.
Inside the Ray struct constructor we have… you guessed it…
this.m_Origin = origin;
this.m_Direction = direction.normalized;
Another Normalize! 
so lets add another 5.
So final count is 18 method calls, 3 sqrts a bunch of float to double and double to float casts and calculating magnitude 3 times and normalizing twice.
This is a simple RANDOM case.
Why nobody solved this? why nobody seems to care?
Mono does not inline, il2cpp also not, or almost never. Even with aggressive inlining applied (not applied in any unity libs) and even if it would be inlined, in Il2cpp it adds a bunch of static bools to every method in static classes to check if they have been initialized yet…
Performance by default.
Maybe… if you don’t use any part of unity.