Yarhl
Yarhl copied to clipboard
Improve performance of DataReader and DataWriter
Is your feature request related to a problem?
The performance of the binary reader and writer classes is worse than the .NET alternative BinaryReader
/ BinaryWriter
. The reason is that it doesn't benefit from hardware acceleration features and it creates several buffers (requiring allocation).
Describe the solution you'd like Create a performance test to compare the performance and improve by:
- Having a re-usable byte array buffer
- Using
stackalloc
andSpan
when possible - Use the class
BinaryPrimitives
to do the little and big endianness conversion. This class from the .NET library features hardware acceleration features.
Describe alternatives you've considered
Remove the class, but we need it as BinaryReader
only supports little-endian decoding.
Additional context
These classes impact the performance of most user code.
The BinaryReader
class has additional performance optimizations detecting if the Stream
is MemoryStream
and then accessing directly to the byte array with Span
s. For now we should skip this kind of optimizations. We can consider them in the future inside DataStream
.