private static unsafe byte[] ExportArray(TryExport exporter) { int bufSize = 4096; while (true) { byte[] buf = CryptoPool.Rent(bufSize); int bytesWritten = 0; bufSize = buf.Length; fixed(byte *bufPtr = buf) { try { if (exporter(buf, out bytesWritten)) { Span <byte> writtenSpan = new Span <byte>(buf, 0, bytesWritten); return(writtenSpan.ToArray()); } } finally { CryptoPool.Return(buf, bytesWritten); } bufSize = checked (bufSize * 2); } } }