Use System.Memory for < .NET 5 and avoid (some) unnecessary allocations #483
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.
Unfortunately #482 got merged too fast, so I couldn't have a look and provide my feedback over there, thus here's a PR with my suggestions 😉
For targets before .NET 5 the System.Memory package is used, which provides Span, and Memory for these targets
So the code can be simplified a bit by re-using parts of the code
internal
MemoryStreamExtension.WriteBytes
renamed toMemoryStreamExtension.Write
so that the usage as extension solely becomesstream.Write
, so for .NET 5 (when built with VS 2022 as CI does ?!) the C# compiler can avoid some allocations by refering to assembly's static data segment, namely for patterns likepackage.Write(new byte[] { 0x1, 0x2, ... }
. See sharplab example for this (thePrivateImplementationDetails
refers to static data, no further allocation))