RNGCryptoServiceProvider.GetBytes()中的OutOfMemoryException.如何创建巨大的随机生成文件?

Sya*_*hya 0 c# arrays file out-of-memory

我想创建一个具有加密强大的随机值序列的文件.这是代码

int bufferLength = 719585280;
byte[] random = new byte[bufferLength];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(random);
File.WriteAllBytes("crypto.bin",random);
Run Code Online (Sandbox Code Playgroud)

问题是它在rng.GetBytes(random);返回OutOfMemoryException.我需要一个具有这种大小的文件(不多也不少).我怎么解决这个问题?谢谢.

Jon*_*eet 5

只需在块中执行:

byte[] buffer = new byte[16 * 1024];
int bytesToWrite = 719585280;
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

using (Stream output = File.Create("crypto.bin"))
{
    while (bytesToWrite > 0)
    {
        rng.GetBytes(buffer);
        int bytesThisTime = Math.Min(bytesToWrite, buffer.Length);
        output.Write(buffer, 0, bytesThisTime);
        bytesToWrite -= bytesThisTime;
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上没有理由一次性在内存中生成整个内容.