Avoid O(N) string[] allocations for N header values in GetCommaSeparatedValues #54808
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.
Reduce allocation in HeaderDictionaryExtensions.GetCommaSeparatedValues
Description
The method parses the header value, adding each segment as a string into a StringValues. It does so one at a time, such that each addition requires allocating a new array one element larger than the previous, for O(N) allocations and O(N^2) work. The only consumer of that also doesn't actually use StringValues: it immediately ToArray's it. So this just builds up the array directly, starting with stack memory for the first four elements and growing into array pool buffers if more is needed, then producing a single array of the right size at the end.