Release BinaryTokenStreamWriter buffers after use in more cases. #2326
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.
I'm not certain how useful this change is, since I haven't profiled the difference.
There are several cases where we are taking buffers from the buffer pool and not returning them. This PR eliminates several of those cases.
BinaryTokenStreamWriter.ToByteArray()
allocates a new byte array and copies the result, whereasToBytes()
returns the underlyingList<ArraySegment<byte>>
directly. Hence it is safe to free the buffers after the former (assuming no further use), but not after the latter.ToBytes()
should be calledAsBytes()
orGetBuffers()
to reduce any confusion.Adding an overload to
JenkinsHash.ComputeHash
which took aList<ArraySegment<byte>>
instead of just the currentbyte[]
would further help to reduce allocations.