连接 3 字节数组并对它们进行 Base64 编码的高性能方法

gdo*_*ica 2 .net c# performance .net-core

鉴于这个简单的代码:

private static string GetEncryptedContent(byte[] arrayA, byte[] arrayB, byte[] arrayC)
{
    var concatenatedArray = new byte[arrayB.Length + arrayC.Length + arrayA.Length];
    Buffer.BlockCopy(arrayB, 0, concatenatedArray, 0, arrayB.Length);
    Buffer.BlockCopy(arrayC, 0, concatenatedArray, arrayB.Length, arrayC.Length);
    Buffer.BlockCopy(arrayA, 0, concatenatedArray, arrayC.Length + arrayB.Length,
        arrayA.Length);
    return Convert.ToBase64String(concatenatedArray);
}
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以对字节数组进行 Base64 编码,而无需分配大小为 a+b+C 的新字节数组?

Mar*_*ell 6

如果数组相对较大,可以使用租用一个(超大的)数组ArrayPool<byte>.Shared,复制到租用的数组,然后使用需要 offset+count 的重载ToBase64String,使用偏移量 0 和已知数据的长度作为计数。然后将租用的阵列返回到池中。

如果已知数组很小,则可以使用需要的重载stackalloc来创建。Span<byte>ToBase64StringReadOnlySpan<byte>