Quick answer: Hits in Unreal’s profile stat unit show Tick spikes when items spawn. Items resolve their mesh via LoadSynchronous — blocking IO on Tick.
An inventory ItemDef resolves its icon and mesh by calling LoadSynchronous when the item is spawned. Each load blocks until the asset is in memory; on cold cache, that’s a 50ms+ hitch.
Async Load Pattern
UAssetManager::GetStreamableManager().RequestAsyncLoad(SoftRef,
FStreamableDelegate::CreateUObject(this, &UItemDef::OnLoaded));Schedules a background load. Tick stays cheap. The callback runs once the asset is in memory.
Pre-Load During Loading Screen
For lists of items the player will see, async-load all soft refs during the loading screen. Cache them and Tick can use Get directly.
Streaming Levels Help
For region-locked items, place them in a streaming level. Engine handles async load when the player enters the region.
Fallback Asset
While loading, render a placeholder (a default icon or mesh). Avoids invisible items during the load window.
Verifying
Profile shows no LoadSynchronous calls during gameplay. Stat unit numbers stable through item spawn bursts.
“LoadSynchronous on Tick is a hitch source. Pre-load or async-load with a callback.”
Audit your codebase for LoadSynchronous calls and replace gameplay-path ones with async loads — the perf win compounds across systems.