| File: Infrastructure\MemoryPoolHttpResponseStreamWriterFactory.cs | Web Access |
| Project: src\aspnetcore\src\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj (Microsoft.AspNetCore.Mvc.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable enable using System.Buffers; using System.Text; using Microsoft.AspNetCore.WebUtilities; namespace Microsoft.AspNetCore.Mvc.Infrastructure; /// <summary> /// An <see cref="IHttpResponseStreamWriterFactory"/> that uses pooled buffers. /// </summary> internal sealed class MemoryPoolHttpResponseStreamWriterFactory : IHttpResponseStreamWriterFactory { /// <summary> /// The default size of buffers <see cref="HttpResponseStreamWriter"/>s will allocate. /// </summary> /// <value> /// 16K causes each <see cref="HttpResponseStreamWriter"/> to allocate one 16K /// <see langword="char"/> array and one 32K (for UTF8) <see langword="byte"/> array. /// </value> /// <remarks> /// <see cref="MemoryPoolHttpResponseStreamWriterFactory"/> maintains <see cref="ArrayPool{T}"/>s /// for these arrays. /// </remarks> public const int DefaultBufferSize = 16 * 1024; private readonly ArrayPool<byte> _bytePool; private readonly ArrayPool<char> _charPool; /// <summary> /// Creates a new <see cref="MemoryPoolHttpResponseStreamWriterFactory"/>. /// </summary> /// <param name="bytePool"> /// The <see cref="ArrayPool{Byte}"/> for creating <see cref="byte"/> buffers. /// </param> /// <param name="charPool"> /// The <see cref="ArrayPool{Char}"/> for creating <see cref="char"/> buffers. /// </param> public MemoryPoolHttpResponseStreamWriterFactory( ArrayPool<byte> bytePool, ArrayPool<char> charPool) { ArgumentNullException.ThrowIfNull(bytePool); ArgumentNullException.ThrowIfNull(charPool); _bytePool = bytePool; _charPool = charPool; } /// <inheritdoc /> public TextWriter CreateWriter(Stream stream, Encoding encoding) { ArgumentNullException.ThrowIfNull(stream); ArgumentNullException.ThrowIfNull(encoding); return new HttpResponseStreamWriter(stream, encoding, DefaultBufferSize, _bytePool, _charPool); } }