private const int PackageHeaderSize = 45;
public void ReadStream(Stream stream, CancellationToken token)
{
_stream = stream;
if (_stream == null) return;
Task.Factory.StartNew(() =>
{
while (!token.IsCancellationRequested && _stream.CanRead)
{
var headerBuffer = ArrayPool<byte>.Shared.Rent(PackageHeaderSize);
var readLen = _stream.Read(headerBuffer, 0, headerBuffer.Length);
if (readLen == 0)
{
Debug.WriteLine("client closed");
}
else if (readLen != PackageHeaderSize)
{
Debug.WriteLine("client date error");
}
else
{
var pkgHeader = BytesToPackage(headerBuffer);
ArrayPool<byte>.Shared.Return(headerBuffer,true);
var dataBuffer = ArrayPool<byte>.Shared.Rent(pkgHeader.DataLength);
ProcessData(pkgHeader, dataBuffer);
}
}
}, token);
}
以上是部分逻辑代码。我不是很清楚 ArrayPool<byte>.Shared 是否能作到
内存的重复利用以及性能优化,减少碎片。