From b27dfa0b0a43fa153f2a3a1265384d78c138d6c6 Mon Sep 17 00:00:00 2001 From: Mikhail Mitrofaton Date: Thu, 3 Jul 2025 17:53:56 +0300 Subject: [PATCH] Faster on linux --- mROA/Implementation/ChannelInteractionModule.cs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/mROA/Implementation/ChannelInteractionModule.cs b/mROA/Implementation/ChannelInteractionModule.cs index 2e80252..5530a2b 100644 --- a/mROA/Implementation/ChannelInteractionModule.cs +++ b/mROA/Implementation/ChannelInteractionModule.cs @@ -168,6 +168,7 @@ namespace mROA.Implementation private bool _manualConnectionState = true; private readonly IEndPointContext _context; private readonly byte[] _lenBuffer; + public StreamExtractor(Stream ioStream, IContextualSerializationToolKit serializationToolkit, IEndPointContext context) { @@ -182,8 +183,8 @@ namespace mROA.Implementation private async Task ReadMessageLength() { - await _ioStream.ReadAsync(_lenBuffer, 0, 2); - + await _ioStream.ReadAsync(_lenBuffer); + var len = BitConverter.ToUInt16(_lenBuffer); return len; @@ -213,15 +214,15 @@ namespace mROA.Implementation private async Task Send(NetworkMessageHeader message, CancellationToken token = default) { - var rawMessage = _serializationToolkit.Serialize(message, _context); - var header = BitConverter.GetBytes((ushort)rawMessage.Length).AsMemory(0, sizeof(ushort)); + var bodySpan = _buffer[2..]; + var len = _serializationToolkit.Serialize(message, bodySpan.Span, _context); + var header = BitConverter.GetBytes((ushort)len); + header.CopyTo(_buffer); Console.WriteLine($"Send start. Time: {profiler.ElapsedMilliseconds}ms"); - - await _ioStream.WriteAsync(header, token); - await _ioStream.WriteAsync(rawMessage, token); + var sendingSpan = _buffer[..(len + 2)]; + await _ioStream.WriteAsync(sendingSpan, token); Console.WriteLine($"Send. Time: {profiler.ElapsedMilliseconds}ms"); profiler.Restart(); - } public async Task SendFromChannel(ChannelReader channel,