Skip to content

Feature: Major Speed Optimizations #17345

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

elliotttate
Copy link

Performance improvements for file navigation and enumeration:

  • Increased concurrency limits: 4 concurrent folder enumerations, 20 concurrent thumbnail loads
  • Implemented smart preloading for visible items with viewport-based loading
  • Added differential collection updates to prevent UI flashing
  • Increased batch size from 32 to 200 items for better throughput
  • Added icon caching with WeakReference for memory efficiency
  • Removed expensive async operations during file enumeration
  • Added performance monitoring for slow operations
  • Fixed icon flashing by setting LoadFileIcon = true immediately
  • Optimized zip file detection to avoid unnecessary async calls

These changes significantly improve perceived performance and reduce UI lag during file navigation.

Performance improvements for file navigation and enumeration:

- Increased concurrency limits: 4 concurrent folder enumerations, 20 concurrent thumbnail loads
- Implemented smart preloading for visible items with viewport-based loading
- Added differential collection updates to prevent UI flashing
- Increased batch size from 32 to 200 items for better throughput
- Added icon caching with WeakReference for memory efficiency
- Removed expensive async operations during file enumeration
- Added performance monitoring for slow operations
- Fixed icon flashing by setting LoadFileIcon = true immediately
- Optimized zip file detection to avoid unnecessary async calls

These changes significantly improve perceived performance and reduce UI lag during file navigation.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
@@ -391,14 +397,16 @@ CancellationToken cancellationToken
}
else
{
if (ZipStorageFolder.IsZipPath(itemPath) && await ZipStorageFolder.CheckDefaultZipApp(itemPath))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please note, changing this logic is likely to cause issues.
#6457

@@ -1328,9 +1600,9 @@ await dispatcherQueue.EnqueueOrInvokeAsync(() =>
{
_ = Task.Run(async () =>
{
await Task.Delay(500);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@hishitetsu can confirm, but if I recall correctly, this delay is to allow time for Windows to finish caching the thumbnail for items in cloud drives.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Correct. Without this delay, thumbnails will not be able to load.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We need a comment for this fr...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is one a little higher up. That said, there are a lot of intricacies and this code is difficult to follow even with comments.

- Fixed TaskCanceledException by using local cancellation tokens instead of global ones
- Improved error handling with try-catch blocks around all async operations
- Enhanced viewport detection with larger buffers for smoother scrolling
- Added Ctrl+Shift+T hotkey to force load all missing thumbnails
- Implemented progressive thumbnail loading with priority system
- Added low-resolution thumbnail pre-loading for better performance
- Fixed race conditions in concurrent thumbnail operations
- Added proper disposal of resources in Dispose method
- Improved scroll throttling to prevent excessive thumbnail loads

These changes significantly improve thumbnail reliability and prevent crashes during fast scrolling or navigation.
@Josh65-2201
Copy link
Member

Josh65-2201 commented Jul 29, 2025

There's a few issues,
Thumbnails won't load if the folder is refreshed
Git information doesn't load at all

I had one time where all the folders icons would be the same in medium layout size, I have restarted and not been able to reproduce it

It's also slower for me then in preview, clicking on a folder takes a while to start highlighting it and then only after it's highlighted will it open

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants