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.