Description

From Licensee:

We discovered a pretty big performance hit in editor when loading level instances for a world partition map, specifically:

EditorActorFolders.cpp:

  • FActorFolders::OnAllLevelsChanged()
  • this method gets called any time an LI is loaded in the editor
  • this method will do housekeeping and a full rebuild of the folder list for the world (expensive)
  • This method will also get called multiple times for nested LIs, which adds to the cost of nested LIs impacting load times.

Proposed optimization:

  • We added a global variable in a WITH_EDITOR block, for GIsBulkLoadingLevelInstances
  • Within LevelInstanceSubsystem.cpp, add a TGuardValue<bool> to flip it on when doing bulk loading of LevelInstancesToLoadOrUpdateCopy
  • After bulk loading is completed, broadcast an event & bind OnAllLevelsChanged to that event, so it can run the rebuild once.

Making this change on our end showed savings of between 40-60% for loading of level instances for out large/dense maps.

Steps to Reproduce

Make a top level, either basic or open world.

Then make a series of empty basic levels, each with some shapes in their own folders. Drop the levels into each other so that the top sublevel contains the next, until you reach a sublevel that does not contain any other sublevel. A series of 5 or so was done.

The drop that container sublevel into your top level. From that top level, whenever one of the level instances was edited, you would see 8 full rebuilds times the depth of the edited sublevel (for example, editing the third level of LI would trigger 24 rebuilds). Each of these rebuilds iterates ALL actors in the full map.

With a large enough world with many actors, this becomes costly very fast.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-300510 in the post.

0
Login to Vote

Fixed
Fix Commit46736928
CreatedJun 26, 2025
ResolvedOct 9, 2025
UpdatedOct 15, 2025
View Jira Issue