From 06d674fd981bb33383baba363d0cd6a6c5eb7563 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Tue, 7 Apr 2026 20:31:31 +1000 Subject: [PATCH] In-place sort instead of LINQ OrderByDescending MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - GuidScrubber.cs:19 — called on every GUID scrub operation - UserMachineScrubber_PerformReplacements.cs:16 — called on every user/machine scrub - DirectoryReplacements_StringBuilder.cs:43 — called on every directory replacement - Eliminates IOrderedEnumerable wrapper allocation + deferred execution overhead. List.Sort is in-place with zero allocation. --- .../Scrubbers/DirectoryReplacements_StringBuilder.cs | 6 +++--- src/Verify/Serialization/Scrubbers/GuidScrubber.cs | 6 +++--- .../Scrubbers/UserMachineScrubber_PerformReplacements.cs | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Verify/Serialization/Scrubbers/DirectoryReplacements_StringBuilder.cs b/src/Verify/Serialization/Scrubbers/DirectoryReplacements_StringBuilder.cs index a9d5551f9..752e23dc9 100644 --- a/src/Verify/Serialization/Scrubbers/DirectoryReplacements_StringBuilder.cs +++ b/src/Verify/Serialization/Scrubbers/DirectoryReplacements_StringBuilder.cs @@ -39,11 +39,11 @@ public static void Replace(StringBuilder builder, List paths) var matches = FindMatches(builder, paths); - // Sort by position descending - var orderByDescending = matches.OrderByDescending(_ => _.Index); + // Sort by position descending. In-place to avoid LINQ allocation + matches.Sort((a, b) => b.Index.CompareTo(a.Index)); // Apply matches - foreach (var match in orderByDescending) + foreach (var match in matches) { builder.Overwrite(match.Value, match.Index, match.Length); } diff --git a/src/Verify/Serialization/Scrubbers/GuidScrubber.cs b/src/Verify/Serialization/Scrubbers/GuidScrubber.cs index 8582410a0..15310f152 100644 --- a/src/Verify/Serialization/Scrubbers/GuidScrubber.cs +++ b/src/Verify/Serialization/Scrubbers/GuidScrubber.cs @@ -15,11 +15,11 @@ public static void ReplaceGuids(StringBuilder builder, Counter counter) var matches = FindMatches(builder, counter); - // Sort by position descending - var orderByDescending = matches.OrderByDescending(_ => _.Index); + // Sort by position descending. In-place to avoid LINQ allocation + matches.Sort((a, b) => b.Index.CompareTo(a.Index)); // Apply matches - foreach (var match in orderByDescending) + foreach (var match in matches) { builder.Overwrite(match.Value, match.Index, 36); } diff --git a/src/Verify/Serialization/Scrubbers/UserMachineScrubber_PerformReplacements.cs b/src/Verify/Serialization/Scrubbers/UserMachineScrubber_PerformReplacements.cs index fe7bbc9dc..499f4ce8e 100644 --- a/src/Verify/Serialization/Scrubbers/UserMachineScrubber_PerformReplacements.cs +++ b/src/Verify/Serialization/Scrubbers/UserMachineScrubber_PerformReplacements.cs @@ -12,11 +12,11 @@ public static void PerformReplacements(StringBuilder builder, string find, strin var matches = FindMatches(builder, find); - // Sort by position descending - var orderByDescending = matches.OrderByDescending(_ => _); + // Sort by position descending. In-place to avoid LINQ allocation + matches.Sort((a, b) => b.CompareTo(a)); // Apply matches - foreach (var match in orderByDescending) + foreach (var match in matches) { builder.Overwrite(replace, match, find.Length); }