Replace CaseInsensitiveComparer with generics in Speller, remove allocations #9405
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.
Description
Replaces
CaseInsensitiveComparerwithIComparer<string>interface (StringComparer). Also replacesArrayListwith genericList<string>for minor perf benefit and increased code quality.IComparer<string>is now stored as areadonlyvariable inSpeller, removing constant comparer allocs on segment checks.char[]allocation/copy and its immediate conversion tostring, skipping one whole alloc round.I've created a very rough typical use-case benchmark that's not gonna be 100% time-accurate but the time itself isn't important, allocs are (should mimic the previous/new code).
Benchmark code
Customer Impact
Increased performance, decreased allocations.
Regression
No.
Testing
Local build, base functionality.
Risk
Low.
Microsoft Reviewers: Open in CodeFlow