Yarhl icon indicating copy to clipboard operation
Yarhl copied to clipboard

Improve performance of DataReader and DataWriter

Open pleonex opened this issue 1 year ago • 0 comments

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 and Span 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 Spans. For now we should skip this kind of optimizations. We can consider them in the future inside DataStream.

pleonex avatar Jul 24 '22 09:07 pleonex