Direct EntityManager access or EntityCommandBuffer for main thread ops / hybrid initialization?

Got a question. I’m using some MonoBehaviours for entity authoring, and been wondering.
Should I rather “queue” multiple entity changes via EntityCommandBuffer or just plain use EntityManager direct access?

From tests I’ve ran EntityCommandBuffer seems to be faster, but I’m not sure why exactly.
Is it because EntityCommandBuffer.Playback is actually burst compiled?

I’m also aware about authoring via queries, and NativeArray which should be faster than ECB.
Sadly that is not possible in this case (legacy architecture).

What specific changes you are referring to?
You mean like structural changes, by adding and removing components?

Yes, .AddComponent, .RemoveComponent, .SetComponentData

If you can, avoid structural changes at runtime.
If possible, create prefab(s), or archetype with all required components and instantiate entities from that.

In case when adding and removing components is required on exisiting entities, good thing about ECB is, that it not only can be bursted, but also can be put into parallel.
So that is double benefit.