Я хочу, чтобы иметь возможность читать и писать большой файл параллельно или, если не параллельно, по крайней мере в блоках, чтобы я не использовал столько памяти.Чтение и письмо параллельно
Это мой текущий код:
// Define memory stream which will be used to hold encrypted data.
MemoryStream memoryStream = new MemoryStream();
// Define cryptographic stream (always use Write mode for encryption).
CryptoStream cryptoStream = new CryptoStream(memoryStream,
encryptor,
CryptoStreamMode.Write);
//start encrypting
using (BinaryReader reader = new BinaryReader(File.Open(fileIn, FileMode.Open))) {
byte[] buffer = new byte[1024 * 1024];
int read = 0;
do {
read = reader.Read(buffer, 0, buffer.Length);
cryptoStream.Write(buffer, 0, read);
} while (read == buffer.Length);
}
// Finish encrypting.
cryptoStream.FlushFinalBlock();
// Convert our encrypted data from a memory stream into a byte array.
//byte[] cipherTextBytes = memoryStream.ToArray();
//write our memory stream to a file
memoryStream.Position = 0;
using (BinaryWriter writer = new BinaryWriter(File.Open(fileOut, FileMode.Create))) {
byte[] buffer = new byte[1024 * 1024];
int read = 0;
do {
read = memoryStream.Read(buffer, 0, buffer.Length);
writer.Write(buffer, 0, read);
} while (read == buffer.Length);
}
// Close both streams.
memoryStream.Close();
cryptoStream.Close();
Как вы можете видеть, он читает весь файл в память, шифрует его, а затем записывает его. Если я использую шифрование файлов, которые очень большие (2 ГБ +), он не работает или, по крайней мере, потребляет 97% моей памяти.
Как я могу сделать это более эффективно?
Вы не можете этого более эффективно и поддерживать шифрование. – SLaks
Я не могу выписать несколько блоков за один раз после их зашифрования? – Malfist
Если вы не используете ECB (который небезопасен), каждый блок зависит от всех предыдущих блоков. – SLaks