~ruther/NosSmooth

bd56c00176ae9b241a86ea80626cf90f33d29989 — František Boháček 2 years ago ae1b330
feat: return array to ArrayPool in PacketStringBuilder
M Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringBuilder.cs => Packets/NosSmooth.PacketSerializer.Abstractions/PacketStringBuilder.cs +19 -0
@@ 16,6 16,7 @@ namespace NosSmooth.PacketSerializer.Abstractions;
public ref struct PacketStringBuilder
{
    private Span<char> _buffer;
    private char[]? _bufferArray;
    private int _position;
    private StringBuilderLevel _currentLevel;
    private char? _insertSeparator;


@@ 31,6 32,7 @@ public ref struct PacketStringBuilder
        _insertSeparator = null;
        _buffer = initialBuffer;
        _position = 0;
        _bufferArray = null;
    }

    /// <summary>


@@ 226,6 228,17 @@ public ref struct PacketStringBuilder
    public void Append(decimal value)
        => AppendSpanFormattable(value);

    /// <summary>
    /// Returns buffer to ArrayPool if it has been used.
    /// </summary>
    public void Dispose()
    {
        if (_bufferArray is not null)
        {
            ArrayPool<char>.Shared.Return(_bufferArray);
        }
    }

    private void AppendSpanFormattable<T>(T value)
        where T : ISpanFormattable
    {


@@ 248,6 261,12 @@ public ref struct PacketStringBuilder

        _buffer.CopyTo(newBuffer);
        _buffer = newBuffer;

        if (_bufferArray is not null)
        {
            ArrayPool<char>.Shared.Return(_bufferArray);
        }
        _bufferArray = newBuffer;
    }

    private void BeforeAppend()

M Packets/NosSmooth.PacketSerializer/PacketSerializer.cs => Packets/NosSmooth.PacketSerializer/PacketSerializer.cs +1 -1
@@ 34,7 34,7 @@ public class PacketSerializer : IPacketSerializer
    /// <inheritdoc/>
    public Result<string> Serialize(IPacket obj)
    {
        var stringBuilder = new PacketStringBuilder(stackalloc char[500]);
        using var stringBuilder = new PacketStringBuilder(stackalloc char[500]);
        var infoResult = _packetTypesRepository.FindPacketInfo(obj.GetType());
        if (!infoResult.IsSuccess)
        {

Do not follow this link