IL2CPP runtime performance improvements in Unity 2021.2
blog.unity.com
blog.unity.com
[1]: https://www.mono-project.com/docs/advanced/aot/#full-aot
IL2CPP was originally developed for the WebGL build target (pre web assembly it went .NET -> cpp -> javascript). After the Apple announcement it was hastily ported to work on iOS. Initially (and maybe up to a couple of years afterwards to some degree ) it was extra buggy and the build time was extremely slow, but I think it was probably worth it in the end.
IL2CPP first target were game consoles.
Stuff like boxing/unboxing, calls using delegates, calling native code, using reflection etc are all much faster in Microsofts version.
Unfortunately, the reality is that Microsoft has more engineers and money devoted to this problem than unity possibly can, so the official c# runtime will continue to support more platforms and being new feature and better performance at a pace that is…
…categorically not possible…
For unity to match.
So… while it’s a bitter pill to swallow, and it was done for reasons that seemed good at the time, it was the wrong choice, and that will become increasingly clear as time rolls on.
There’s what I believe is a pretty classic case of sunk cost fallacy going on with a number of current initiatives in the Unity ecosystem.
Some companies thrive under competition. Some… do not.
Likewise in what concerns iOS, Android and WebAssembly, those same engineers keep using Mono runtime, as apparently there aren't as many resources as you paint.
A good example of the resourcing problem is the ongoing tragedy of migrating the development from UWP into WinUI 3.0/AppSDK
For domain reload performance, 30s seems really a lot, I suggest you profile InitializeOnLoad calls in the editor - some 3rd party plugins have a nasty habit of clogging domain reload with stupid "check for updates" http calls and similar junk, I found it rather easy to clean up.
[1] - https://forum.unity.com/threads/unity-future-net-development...