Skip to content

Commit 5711834

Browse files
committed
[dotnet] [bidi] Reuse memory when receiving websocket messages
1 parent f5b8d3e commit 5711834

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

dotnet/src/webdriver/BiDi/Communication/Transport/WebSocketTransport.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class WebSocketTransport(Uri _uri) : ITransport, IDisposable
3535
private readonly ArraySegment<byte> _receiveBuffer = new(new byte[1024 * 8]);
3636

3737
private readonly SemaphoreSlim _socketSendSemaphoreSlim = new(1, 1);
38+
private readonly MemoryStream _sharedMemoryStream = new();
3839

3940
public async Task ConnectAsync(CancellationToken cancellationToken)
4041
{
@@ -43,21 +44,19 @@ public async Task ConnectAsync(CancellationToken cancellationToken)
4344

4445
public async Task<byte[]> ReceiveAsync(CancellationToken cancellationToken)
4546
{
46-
using var ms = new MemoryStream();
47+
_sharedMemoryStream.SetLength(0);
4748

4849
WebSocketReceiveResult result;
4950

5051
do
5152
{
5253
result = await _webSocket.ReceiveAsync(_receiveBuffer, cancellationToken).ConfigureAwait(false);
5354

54-
await ms.WriteAsync(_receiveBuffer.Array!, _receiveBuffer.Offset, result.Count, cancellationToken).ConfigureAwait(false);
55+
await _sharedMemoryStream.WriteAsync(_receiveBuffer.Array!, _receiveBuffer.Offset, result.Count, cancellationToken).ConfigureAwait(false);
5556
}
5657
while (!result.EndOfMessage);
5758

58-
ms.Seek(0, SeekOrigin.Begin);
59-
60-
byte[] data = ms.ToArray();
59+
byte[] data = _sharedMemoryStream.ToArray();
6160

6261
if (_logger.IsEnabled(LogEventLevel.Trace))
6362
{
@@ -69,10 +68,12 @@ public async Task<byte[]> ReceiveAsync(CancellationToken cancellationToken)
6968

7069
public async Task SendAsync(byte[] data, CancellationToken cancellationToken)
7170
{
72-
await _socketSendSemaphoreSlim.WaitAsync(cancellationToken);
71+
var semaphoreTask = _socketSendSemaphoreSlim.WaitAsync(cancellationToken);
7372

7473
try
7574
{
75+
await semaphoreTask.ConfigureAwait(false);
76+
7677
if (_logger.IsEnabled(LogEventLevel.Trace))
7778
{
7879
_logger.Trace($"BiDi SND --> {Encoding.UTF8.GetString(data)}");
@@ -89,5 +90,7 @@ public async Task SendAsync(byte[] data, CancellationToken cancellationToken)
8990
public void Dispose()
9091
{
9192
_webSocket.Dispose();
93+
_sharedMemoryStream.Dispose();
94+
_socketSendSemaphoreSlim.Dispose();
9295
}
9396
}

0 commit comments

Comments
 (0)