Assetbundle LoadAsyc speed is much slower than Load

I am trying use assetbundle “LoadAsync” method asynchronous load object from assetbundle. but I found the speed for “LoadAsync” is much slower than “Load”, for example, I load a object from 38kb assetsbundle, in editor, use “Load” Method, only needed 23ms, but use “LoadAsync”, I need wait 391ms to finish.

if I use “LoadAsync” to load a group of objects from separate assetbundle at the same time, and the assetbundle size of them from 30kb~40kb, then the load be finished one by one base the order I start them, and the finish time for latter one always about 300ms longer than before one, it looks like if you call multiple “LoadAsync” at the same time, they will not execute concurrent, just be execute one by one in one background thread.

anyone have more info for this? or have good suggestions about how to speed up “LoadAsync”?

It’s slowed because it’s able to load without blocking the main game loop.
It also most likely loads in a queue to avoid you just choking up the main thread with too many background loading threads, and defeating the whole purpose of LoadAsync (which is to load assets without disturbing gameplay/loading sequences).

If you need an asset ASAP, use Load, if you’d rather it takes it’s time, but loads in the background use LoadAsync. Being able to speed up the priority of LoadAsync to the point that it loads comparatively to Load would just cause the game to stutter and reduce the usefulness of LoadAsync entirely.

Some options you can do are A) reduce activity in the main game, by turning off sounds, or freezing some physics so more time can be spent loading per frame. B) Start loading earlier C) Just use Load in the first place if you are in a hurry D) Force the main thread to sleep 1 or more times during the main loop execution (not suggested and extremely hacky, but still possibly a solution).

It’s important to note as well that LoadAsync is done before it tells you. But it will only yield back from the Coroutine once the next Update loop is called, depending on your framerate.