public static void Main()
const int length = 150000;
var manager = new RecyclableMemoryStreamManager();
using var stream1 = CreateNewStream();
using var stream2 = CreateNewStream();
Console.WriteLine("Sequence.SequenceEquals: {0}", stream1.GetReadOnlySequence().SequenceEqual(stream2.GetReadOnlySequence()));
Console.WriteLine("Span.SequenceEquals: {0}", stream1.GetSpan(length).SequenceEqual(stream2.GetSpan(length)));
RecyclableMemoryStream CreateNewStream()
var stream = manager.GetStream(Guid.NewGuid());
var data = Enumerable.Repeat(byte.MaxValue, length).ToArray();
stream.Write(data, 0, data.Length);
public static class ReadOnlySequenceExtension
public static bool SequenceEqual(this ReadOnlySequence<byte> left, ReadOnlySequence<byte> right)
if (left.Length != right.Length)
var leftReader = new SequenceReader<byte>(left);
var rightReader = new SequenceReader<byte>(right);
while (leftReader.Remaining > 0 && rightReader.Remaining > 0)
if (leftReader.CurrentSpan.Length != rightReader.CurrentSpan.Length)
if (!leftReader.CurrentSpan.SequenceEqual(rightReader.CurrentSpan))
leftReader.Advance(leftReader.CurrentSpan.Length);
rightReader.Advance(leftReader.CurrentSpan.Length);