Skip to content

Commit fae97b6

Browse files
Optimize writing of chunkes
1 parent f843e24 commit fae97b6

1 file changed

Lines changed: 8 additions & 25 deletions

File tree

Engine/Internal/Protocol/Sinks/ChunkedWriter.cs

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,14 @@ public void Advance(int count)
3535

3636
var span = _activeMemory.Span;
3737

38-
var headerLength = WriteHex((uint)count, span);
38+
WriteHex((uint)count, span);
3939

40-
if (headerLength != MaxHeaderSize)
41-
{
42-
span.Slice(MaxHeaderSize, count)
43-
.CopyTo(span.Slice(headerLength));
44-
}
45-
46-
var trailerOffset = headerLength + count;
40+
var trailerOffset = MaxHeaderSize + count;
4741

4842
span[trailerOffset] = (byte)'\r';
4943
span[trailerOffset + 1] = (byte)'\n';
5044

51-
context.Writer.Advance(headerLength + count + TrailerSize);
45+
context.Writer.Advance(MaxHeaderSize + count + TrailerSize);
5246

5347
_activeMemory = default;
5448
}
@@ -62,30 +56,19 @@ public void Finish()
6256
context.Writer.Advance(5);
6357
}
6458

65-
private static int WriteHex(uint value, Span<byte> dest)
59+
private static void WriteHex(uint value, Span<byte> dest)
6660
{
67-
const int end = 8;
68-
69-
var pos = end;
70-
71-
do
61+
for (var pos = 7; pos >= 0; pos--)
7262
{
7363
var digit = value & 0xF;
7464

75-
dest[--pos] = digit < 10 ? (byte)('0' + digit) : (byte)('A' + digit - 10);
65+
dest[pos] = digit < 10 ? (byte)('0' + digit) : (byte)('A' + digit - 10);
7666

7767
value >>= 4;
7868
}
79-
while (value != 0);
80-
81-
var length = end - pos;
82-
83-
dest.Slice(pos, length).CopyTo(dest);
84-
85-
dest[length] = (byte)'\r';
86-
dest[length + 1] = (byte)'\n';
8769

88-
return length + 2;
70+
dest[8] = (byte)'\r';
71+
dest[9] = (byte)'\n';
8972
}
9073

9174
}

0 commit comments

Comments
 (0)