Faster on linux

This commit is contained in:
2025-07-03 17:53:56 +03:00
parent afe4fd0774
commit b27dfa0b0a
@@ -168,6 +168,7 @@ namespace mROA.Implementation
private bool _manualConnectionState = true; private bool _manualConnectionState = true;
private readonly IEndPointContext _context; private readonly IEndPointContext _context;
private readonly byte[] _lenBuffer; private readonly byte[] _lenBuffer;
public StreamExtractor(Stream ioStream, IContextualSerializationToolKit serializationToolkit, public StreamExtractor(Stream ioStream, IContextualSerializationToolKit serializationToolkit,
IEndPointContext context) IEndPointContext context)
{ {
@@ -182,8 +183,8 @@ namespace mROA.Implementation
private async Task<ushort> ReadMessageLength() private async Task<ushort> ReadMessageLength()
{ {
await _ioStream.ReadAsync(_lenBuffer, 0, 2); await _ioStream.ReadAsync(_lenBuffer);
var len = BitConverter.ToUInt16(_lenBuffer); var len = BitConverter.ToUInt16(_lenBuffer);
return len; return len;
@@ -213,15 +214,15 @@ namespace mROA.Implementation
private async Task Send(NetworkMessageHeader message, CancellationToken token = default) private async Task Send(NetworkMessageHeader message, CancellationToken token = default)
{ {
var rawMessage = _serializationToolkit.Serialize(message, _context); var bodySpan = _buffer[2..];
var header = BitConverter.GetBytes((ushort)rawMessage.Length).AsMemory(0, sizeof(ushort)); 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"); Console.WriteLine($"Send start. Time: {profiler.ElapsedMilliseconds}ms");
var sendingSpan = _buffer[..(len + 2)];
await _ioStream.WriteAsync(header, token); await _ioStream.WriteAsync(sendingSpan, token);
await _ioStream.WriteAsync(rawMessage, token);
Console.WriteLine($"Send. Time: {profiler.ElapsedMilliseconds}ms"); Console.WriteLine($"Send. Time: {profiler.ElapsedMilliseconds}ms");
profiler.Restart(); profiler.Restart();
} }
public async Task SendFromChannel(ChannelReader<NetworkMessageHeader> channel, public async Task SendFromChannel(ChannelReader<NetworkMessageHeader> channel,