From e5a4f3b171df70d33b09fc9d9e4ca61d008d1c67 Mon Sep 17 00:00:00 2001 From: Uncled1023 Date: Sat, 21 May 2022 09:29:24 -0700 Subject: [PATCH] Optimized response stream buffer --- Utilities/ResponseHelper.cs | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/Utilities/ResponseHelper.cs b/Utilities/ResponseHelper.cs index 737f47f..d1654b4 100644 --- a/Utilities/ResponseHelper.cs +++ b/Utilities/ResponseHelper.cs @@ -16,44 +16,34 @@ namespace Teknik.Utilities try { int processedBytes = 0; - byte[] buffer = new byte[chunkSize]; - int bytesRemaining = length; - int bytesToRead = chunkSize; + var bufferSize = chunkSize; + if (length < chunkSize) + bufferSize = length; + Memory buffer = new byte[bufferSize]; do { - if (chunkSize > bytesRemaining) - { - bytesToRead = bytesRemaining; - } - - processedBytes = stream.Read(buffer, 0, bytesToRead); + processedBytes = await stream.ReadAsync(buffer); if (processedBytes > 0) { - await response.Body.WriteAsync(buffer, 0, processedBytes); + await response.Body.WriteAsync(buffer.Slice(0, processedBytes)); // Flush the response if (flush) { await response.Body.FlushAsync(); } - - // Clear the buffer - Array.Clear(buffer, 0, chunkSize); - - // decrement the total bytes remaining to process - bytesRemaining -= processedBytes; } } - while (processedBytes > 0 && bytesRemaining > 0); + while (processedBytes > 0); } catch (Exception) { // Don't worry about it. Just leave - await response.Body.FlushAsync(); } finally { await response.Body.FlushAsync(); + // dispose of file stream stream?.Dispose(); }