Optimize large-manifest browsing and archive startup#689
Open
NotOfficer wants to merge 7 commits into
Open
Conversation
There was a problem hiding this comment.
Pull request overview
This PR focuses on improving responsiveness and throughput when working with very large manifests by moving heavy work off the UI thread, adding UI virtualization for folder/asset browsing, batching dispatcher updates, and limiting resolver concurrency; it also reduces archive-startup overhead by coalescing status updates and batching archive-list mutations.
Changes:
- Added debounced (idle) auto-refresh for package search text input and improved Go To navigation flow.
- Virtualized and optimized folder tree realization / selection, including programmatic container realization support.
- Batched archive list/status updates and introduced lightweight/lazy collections for assets and search results.
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| FModel/Views/SearchView.xaml.cs | Adds auto-search debounce and switches Go To navigation to async + preview-suspension. |
| FModel/Views/SearchView.xaml | Wires search TextChanged/Closed events and updates watermark text. |
| FModel/Views/Resources/Resources.xaml | Enables virtualization/recycling and updates bindings to use AssetsList.Count. |
| FModel/Views/Resources/Controls/TiledExplorer/Resources.xaml.cs | Updates folder auto-expand logic to use new AssetsList.Count. |
| FModel/Views/Resources/Controls/TiledExplorer/FolderButton3.xaml | Updates count binding to AssetsList.Count. |
| FModel/Views/Resources/Controls/TiledExplorer/FolderButton2.xaml | Updates count binding to AssetsList.Count. |
| FModel/Views/Resources/Controls/NavigableVirtualizingStackPanel.cs | Exposes BringIndexIntoView for virtualized navigation. |
| FModel/Views/Resources/Controls/Breadcrumb.xaml.cs | Switches breadcrumb navigation to async Go To. |
| FModel/ViewModels/SearchViewModel.cs | Caches parsed filters/regex per refresh and lazily materializes the results view. |
| FModel/ViewModels/GameFileViewModel.cs | Caps resolver concurrency and suspends previews during navigation. |
| FModel/ViewModels/GameDirectoryViewModel.cs | Batches archive-list additions/updates and adds flush/scheduling helpers. |
| FModel/ViewModels/CUE4ParseViewModel.cs | Flushes queued archive UI changes and uses new Clear() APIs. |
| FModel/ViewModels/Commands/LoadCommand.cs | Uses new AssetsFolder.Clear() and SearchVm.Clear() methods. |
| FModel/ViewModels/Commands/GoToCommand.cs | Replaces synchronous tree walking with async realized-path selection. |
| FModel/ViewModels/AssetsListViewModel.cs | Lazily creates asset view-models and supports a cached filter predicate. |
| FModel/ViewModels/AssetsFolderViewModel.cs | Reworks tree construction with path dictionary lookup and fast paths. |
| FModel/ViewModels/ApplicationViewModel.cs | Coalesces provider status updates and adds preview-suspension flag. |
| FModel/MainWindow.xaml.cs | Adds async folder selection into virtualized tree + preview refresh helper. |
| FModel/MainWindow.xaml | Updates UI bindings to use AssetsList.Count. |
| FModel/Framework/RangeObservableCollection.cs | Optimizes AddRange notifications and adds AddWithoutNotification. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Large-manifest browsing
Archive startup
Performance
Across the paired FModel/CUE4Parse Fortnite startup changes:
FileProviderDictionary.AddFiles: 2,681 -> 763 (71.5% lower)The large-manifest browsing work was profiled and manually exercised with a Fortnite Live manifest containing 2,215,162 packages.
Validation
dotnet build FModel\FModel.csproj --no-restore -p:OutputPath=C:\Users\Marlon\AppData\Local\Temp\FModelCodexBuild\(0 errors)pakchunk32-WindowsClient.utocpackage-index output matches the expected 247,486 normal packages