diff --git a/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs b/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs index d2c017a9343ec..becf9fcc8fdbc 100644 --- a/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs +++ b/dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs @@ -35,6 +35,7 @@ class WebSocketTransport(Uri _uri) : ITransport, IDisposable private readonly ArraySegment _receiveBuffer = new(new byte[1024 * 8]); private readonly SemaphoreSlim _socketSendSemaphoreSlim = new(1, 1); + private readonly MemoryStream _sharedMemoryStream = new(); public async Task ConnectAsync(CancellationToken cancellationToken) { @@ -43,7 +44,7 @@ public async Task ConnectAsync(CancellationToken cancellationToken) public async Task ReceiveAsync(CancellationToken cancellationToken) { - using var ms = new MemoryStream(); + _sharedMemoryStream.SetLength(0); WebSocketReceiveResult result; @@ -51,13 +52,11 @@ public async Task ReceiveAsync(CancellationToken cancellationToken) { result = await _webSocket.ReceiveAsync(_receiveBuffer, cancellationToken).ConfigureAwait(false); - await ms.WriteAsync(_receiveBuffer.Array!, _receiveBuffer.Offset, result.Count, cancellationToken).ConfigureAwait(false); + await _sharedMemoryStream.WriteAsync(_receiveBuffer.Array!, _receiveBuffer.Offset, result.Count, cancellationToken).ConfigureAwait(false); } while (!result.EndOfMessage); - ms.Seek(0, SeekOrigin.Begin); - - byte[] data = ms.ToArray(); + byte[] data = _sharedMemoryStream.ToArray(); if (_logger.IsEnabled(LogEventLevel.Trace)) { @@ -69,10 +68,12 @@ public async Task ReceiveAsync(CancellationToken cancellationToken) public async Task SendAsync(byte[] data, CancellationToken cancellationToken) { - await _socketSendSemaphoreSlim.WaitAsync(cancellationToken); + var semaphoreTask = _socketSendSemaphoreSlim.WaitAsync(cancellationToken); try { + await semaphoreTask.ConfigureAwait(false); + if (_logger.IsEnabled(LogEventLevel.Trace)) { _logger.Trace($"BiDi SND --> {Encoding.UTF8.GetString(data)}"); @@ -89,5 +90,7 @@ public async Task SendAsync(byte[] data, CancellationToken cancellationToken) public void Dispose() { _webSocket.Dispose(); + _sharedMemoryStream.Dispose(); + _socketSendSemaphoreSlim.Dispose(); } }