[C#] Update RawTableIterBase.Enumerator to use ArrayPool for buffer#4385
Open
[C#] Update RawTableIterBase.Enumerator to use ArrayPool for buffer#4385
ArrayPool for buffer#4385Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
This is the implementation of a fix for #4093
Description of Changes
RawTableIterBase.Enumeratorto rent its scratch buffer fromArrayPool<byte>.Shared(with dynamic re-rent onBUFFER_TOO_SMALL) and return it on dispose, so iterating rows no longer allocates a freshbyte[]per step.ArraySegment<byte> Current, but now the underlying storage is reused across iterations rather than recreated each time.Testing results from
master:Testing results with this fix:
API and ABI breaking changes
No API or ABI changes
Expected complexity level and risk
2 - low/moderate:
Touches the hot-path iterator that every
Iter/Find/Filtercall usesTesting
masterand this branch, confirming allocations drop from ~131 KB per read to payload-scaled values.row_count=50000,sum=1249975000).