|
#14
|
||||
|
||||
|
v2.40 Release Notes
Patch Notes:
- Replaced LockWindowUpdate with WM_SETREDRAW to eliminate desktop flickering and visual artifacts during bulk file updates. - Replaced string-based status tracking with a lightweight ItemStatus byte enum to significantly reduce memory usage and accelerate sorting operations. - Switched worker threads to synchronous I/O and hashing to remove Async State Machine overhead, maximizing throughput on high-speed NVMe drives. - Implemented modulo-based throttling in the UI update loop to drastically reduce CPU cycles spent on system time checks during high-speed processing. - Split the monolithic Form1 and Helpers files into specialized partial classes and namespaces to improve organization. - Centralized P/Invoke definitions into a dedicated Win32Storage class to isolate native code and resolve compiler ambiguity errors. - Optimized memory usage by refactoring the data model to store hashes as raw byte arrays instead of strings. - Reduced garbage collection pressure by implementing ArrayPool for buffer reuse within the hashing engine. - Corrected the project build configuration to disable incompatible trimming flags while maintaining a lightweight single-file executable. - Implemented a new "View" menu to optionally toggle Hash/Expected Hash columns and lock column ordering. - Added a "Show Full File Paths" option that dynamically adjusts the File Name column's maximum width limit to the longest text length plus a 25px buffer. - Integrated a "Show Duplicates" filter that groups files by hash and enables conditional "Copy Duplicates" and "Delete Duplicates" batch script generation. - Added a "Delete BAD Files" script generator that automatically enables only when verification errors are detected. - Updated all save dialogs to default to the root directory of the scanned files rather than the application path. - Removed "Script Saved" message boxes to allow for silent, uninterrupted script generation. - Fixed column resizing logic to enforce "Hard Stop" limits (0.75x–1.5x) using event cancellation, eliminating visual snap-back artifacts. - Enabled horizontal scrolling on the main list view to ensure long file paths remain viewable. - Replaced the hashing engine with a Producer/Consumer pattern using System.Threading.Channels to decouple high-speed file scanning from processing logic. - Implemented System.Buffers.ArrayPool<byte> to recycle memory buffers, eliminating massive Garbage Collection overhead during large batch operations. - Optimized the file scanner to batch UI updates in groups of 2,000, allowing raw disk read speeds to saturate without freezing the interface. - Replaced the performance-heavy "Pin-to-Top" mechanism with a scalable SplitContainer and secondary ListView for tracking active large files. - Added GDI+ resource caching to the Virtual Mode rendering pipeline to prevent system handle exhaustion and crashes during extensive scrolling. - Fixed critical thread-safety race conditions by ensuring list counts and progress limits are only resolved on the UI thread. - Enhanced the user interface with multi-colored status statistics, synchronized column alignment, and a debounced search filter for responsive interaction. - Replaced the object-based data model with a Structure of Arrays (SoA) architecture to eliminate per-file object overhead and maximize CPU cache locality. - Switched from FileStream to System.IO.RandomAccess for zero-allocation file reading, creating a direct "disk-to-memory" pipeline. - Hoisted hashing buffers and algorithm instances to thread-local storage to prevent Garbage Collection churn during batch processing. - Implemented a custom String Pool utilizing .NET 10's AlternateLookup to deduplicate repetitive path strings and significantly reduce memory usage. - Enabled Dynamic Profile-Guided Optimization (PGO) in the project settings to let the JIT compiler optimize hot loops based on runtime execution data. - Refactored the producer-consumer pipeline to pass lightweight structs (FileJob) between threads instead of heap-allocated class objects. - Updated the Virtual ListView to render directly from primitive arrays and cache hex string conversions, eliminating UI scroll lag. Additional Notes: Processing is 1.61x faster than v2.30, memory usage has been reduced by 84%. SharpSFV is now 16.53x faster than QuickSFV (when verifying using pre-generated MD5 hashes), with QuickSFV only being able to process around 50% of the provided benchmark MD5 file, before crashing. |
| The Following 3 Users Say Thank You to L33THAK0R For This Useful Post: | ||
| Thread Tools | Search this Thread |
| Display Modes | |
|
|