我正在使用来自 TcpClient 的 Json,为了获得低分配和良好性能的解决方案,我决定使用新的解决方案System.IO.Pipelines
来处理 IO 和System.Text.Json
反序列化。管道的输出是一个ReadOnlySequence<byte>
. 当 中只有一个段时我没问题ReadOnlySequence
,这样我就可以将此段(即 a ReadOnlySpan<byte>
)传递给反序列化器。但是我应该如何处理多个细分?
到目前为止,我所拥有的是下面的代码。但在某些情况下,序列的长度太大,所以我在stackalloc
. 此外,在我看来,制作数据副本违反了 System.IO.Pipelines 的意图。不应该System.Text.Json.JsonSerializer.Deserialize
超载ReadOnlySequence
吗?关于如何解决这个问题的任何建议?
private void ProcessLine(ReadOnlySequence<byte> sequence)
{
if (sequence.IsSingleSegment)
{
_result = JsonSerializer.Deserialize<MyType>(sequence.FirstSpan, _jsonSerializerOptions);
}
else
{
Span<byte> stackSpan = stackalloc byte[(int)sequence.Length];
sequence.CopyTo(stackSpan);
_result = JsonSerializer.Deserialize<MyType>(stackSpan, _jsonSerializerOptions);
}
}