Remove Boyer-Moore in favor of IndexOf #51815
Merged
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.
Closes #49223
Continuation of #51426
This PR removes boyer-moore entirely in favor of the vectorized
IndexOf
method. This removes anint[256]
alloc per section of the multipart data, as well as the construction cost of generating the skip table.Additionally, noticed the
MultipartBoundary
class was allocating the boundary bytes array twice per use. The only difference between the arrays is one has\r\n
at the beginning, so we can avoid the second alloc by always using the larger array and slicing.Before:
After:
Highlights:
When the boundary size was small (6) and the payload was large (10m+ bytes) the RPS was ~120 and ~140 (no read vs. read), with the change it's now ~970 and ~1300.
Smaller payload tests improved by ~10%-33%.