Propagate match only in asset selection to reduce allocations when grouping #5944
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.
Bug
Related: NuGet/Home#12728
Description
The assets selection in restore tends to be 2 phase, group, and then select the frameworks you care about.
The grouping part never really uses the LockFileItem, the strings, the metadata etc. There's already some code that avoids actualizing and create the lock file items for that.
This PR takes that idea and applies to a lot more of places we might allocate unused strings.
This gets us about ~15MB on OrchardCore.
If you look at the traces, the difference is in TryLookup. There's a lot fewer allocations, since strings are not being actualized if they're not going to be needed.
Before:
After:
Microbenchmarks confirm this:
Match Only:
Note that from a microbenchmark perspective, the "grouping" step, is:
PR Checklist