Извлечение ISO-файлов в 7z.dll- Исключение нехватки памяти
Я использовал две оболочки сейчас, чтобы попытаться извлечь файл ISO. Но безуспешно
Я пробовал sevenzipsharp и http://www.codeproject.com/Articles/27148/C-NET-Interface-for-7-Zip-Archive-DLLs, но они оба дают одно и то же исключение. Файл ISO содержит файлы.vob (фильмы), а общий размер файла ISO составляет 4,35 ГБ. Когда я пытаюсь извлечь из него один VOB-файл размером 1 ГБ, я получаю исключение Out of Memory.
Я на самом деле хочу извлечь файлы.vob и затем передать их через Upnp/DLNA
SevenZipExtractor Extractor;
try
{
String[] FileNames = RawFileExtractor(path, out Extractor);
Extractor.ExtractFile(FileNames[8], ms) //the 1GB file: exception is here
}
catch{}
Extractor.Dispose();
1 ответ
Extractor.ExtractFile(FileNames[8], ms)
Не могу увидеть "мс", но это возможно в MemoryStream. Это действительно не будет работать так хорошо с файлом jiggabyte. Весьма вероятно, что OutOfMemoryException получится, когда ваша программа работает как 32-разрядный процесс. Достаточно легко исправить на вашей машине, вы до лошадиных сил. Project + Properties, вкладка Build, выберите AnyCPU и снимите флажок "Предпочитать 32-битный", если вы его видите.
Все еще очень расточительно и точно не гарантированно будет работать на компьютере вашего пользователя, если у него нет 64-битной операционной системы. Довольно непонятно, что вы на самом деле делаете с этим MemoryStream. Скорее всего, вы должны вместо этого использовать FileStream, чтобы он был непосредственно извлечен на диск. Вы будете использовать 4096 байтов вместо джиггабайта. Видеопроигрывателю все равно, воспроизводится ли он из памяти или с диска. Также рассмотрите мудрость сжатия видео, оно уже сжато кодировщиком.