Я пытаюсь добавить большой видео файл (~ 500MB) к ArchiveEntry, используя этот код:Добавление больших файлов IO.Compression.ZipArchiveEntry бросает OutOfMemoryException Exception
using (var zipFile = ZipFile.Open(outputZipFile, ZipArchiveMode.Update))
{
var zipEntry = zipFile.CreateEntry("largeVideoFile.avi");
using (var writer = new BinaryWriter(zipEntry.Open()))
{
using (FileStream fs = File.Open(@"largeVideoFile.avi", FileMode.Open))
{
var buffer = new byte[16 * 1024];
using (var data = new BinaryReader(fs))
{
int read;
while ((read = data.Read(buffer, 0, buffer.Length)) > 0)
{
writer.Write(buffer, 0, read);
}
}
}
}
}
Я получаю ошибку
System.OutOfMemoryException
когда writer.Write называется, alltought я использовал промежуточный буфер ....
Любая идея, как это решить?
Вы можете упростить код, удалив считыватели/писатели и используя stream.copyto. Сомневаюсь, что это исправляет проблему. – CodesInChaos
Взгляните на 'AddEntry (name, stream)' (не закрывайте поток перед вызовом 'Save') и' AddFile (name, nameInFileSystem) ' – CodesInChaos
@CodesInChaos: вы хотите использовать' zipFile.CreateEntryFromFile' -> все еще не работает. Я принял ответ с изменением архитектуры процессора на X64, но неэффективность ZipArchiveEntry стоит указать, когда указан параметр ZipArchiveMode.Update (это приводит к загрузке всего содержимого почтового индекса в памяти) –