Exemplo n.º 1
0
        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);
                }
            }
        }