The pooling is the good practice to reuse created resources instead of a new allocation. I found Microsoft.IO.RecyclableMemoryStream package for using memory streams pooling during logging HTTP-requests in my server.
RecyclableMemoryStreamManager _recyclableMemoryStreamManager = new RecyclableMemoryStreamManager();
using var memoryStream = _recyclableMemoryStreamManager.GetStream();
bodyStream.Seek(0, SeekOrigin.Begin);
bodyStream.CopyTo(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
string responseBody;
const int readChunkBufferLength = 4096;
using var textWriter = new StringWriter();
using (var streamReader = new StreamReader(memoryStream))
{
var readChunk = new char[readChunkBufferLength];
int readChunkLength;
do
{
readChunkLength = streamReader.ReadBlock(readChunk,
0,
readChunkBufferLength);
textWriter.Write(readChunk, 0, readChunkLength);
}
while (readChunkLength > 0);
}
bodyStream.Seek(0, SeekOrigin.Begin);
responseBody = textWriter.ToString();