Hi there,
We are editing a fairly large level, and deleting actors has become a painful operation with many operations taking up to 10s. The main culprit seems to be looking for soft references in the following callstack:
FAssetRenameManager::CheckPackageForSoftObjectReferences(UPackage * Package, const TMap<FSoftObjectPath,FSoftObjectPath,FDefaultSetAllocator,TDefaultMapHashableKeyFuncs<FSoftObjectPath,FSoftObjectPath,0> > & AssetRedirectorMap, TArray<UObject *,FDefaultAllocator> & OutReferencingObjects) Line 1004
FAssetRenameManager::LoadReferencingPackages(TArray<FAssetRenameDataWithReferencers,FDefaultAllocator> & AssetsToRename, bool bLoadAllPackages, bool bCheckStatus, TArray<UPackage *,FDefaultAllocator> & OutReferencingPackagesToSave, TArray<UObject *,FDefaultAllocator> & OutSoftReferencingObjects) Line 632
FAssetRenameManager::FindSoftReferencesToObject(FSoftObjectPath TargetObject, TArray<UObject *,FDefaultAllocator> & ReferencingObjects) Line 248
UAssetToolsImpl::FindSoftReferencesToObject(FSoftObjectPath TargetObject, TArray<UObject *,FDefaultAllocator> & ReferencingObjects) Line 635
UUnrealEdEngine::edactDeleteSelected(UWorld * InWorld, bool bVerifyDeletionCanHappen, bool bWarnAboutReferences, bool bWarnAboutSoftReferences) Line 776
Our total actor count is about 7k, and most of it is broken up into smaller sub-levels with the largest about 1.7k actors. The code in question seems to be serializing the level to check for soft references in order to warn the user about them.
Questions:
- Is there a safe way to speed this up? It looks like edActDeleteSelected has a flag for warning about soft references that defaults to true. Would changing this to false (or adding a modifier key to force it false) cause any major issues?
- Is this hang expected for a level with 1.8k actors, or is there maybe something else going on internally like a specific actor class causing hangs?
Thanks,
- Chance