Ionic.Zip (DotNetZip) зависает в методе сохранения с IO.MemoryStream - PullRequest
5 голосов
/ 17 января 2011

Я попытаюсь создать zip-файл с DotNetZip-Libary с 106 изображениями (675 МБ) со следующим кодом:

Public Function GetZip() As Byte()
    Dim zip As New Ionic.Zip.ZipFile(String.Format("{0}.zip", Me.GallerySystemName))
    AddHandler zip.SaveProgress, AddressOf SaveProgress

    For Each img In Me.Images
        zip.AddFile(img.OriginalFile.FullName, "")
    Next

    Dim bytZip As Byte()

    Using ms As New MemoryStream
        zip.Save(ms)
        bytZip = ms.ToArray
    End Using

    Return bytZip
End Function

Когда я запускаю этот код, выполнение обычно останавливается на изображении 40(иногда раньше) без каких-либо исключений.Ничего не произошло.Я пытался сохранить ZIP непосредственно в файл.Оно работает.

Есть идеи?

Ян

Ответы [ 2 ]

15 голосов
/ 25 февраля 2014

Устанавливает свойство объекта zip ParallelDeflateThreshold в -1 непосредственно перед сохранением файла zip

zip.ParallelDeflateThreshold = -1

REF: http://forums.codeguru.com/showthread.php?534177-Issue-with-DotNetZip-ionic.zip-class-hanging-on-save

9 голосов
/ 14 ноября 2012

Прошло почти 2 года с момента вашего вопроса, поэтому я сомневаюсь, что это поможет, но я только что столкнулся с той же проблемой в v1.9.1.8.

Я решил эту проблему, увеличив свойства BufferSize и CodecBufferSize ZipFile до 1 МБ каждое.

Я не могу загрузить исходный код DotNetZip из-зафильтры в работе, но вот весьма вероятный комментарий от http://dotnetzip.codeplex.com/releases/view/68268

В коде есть довольно серьезная ошибка.Я работаю, чтобы понять это.Другой парень зарегистрировал это передо мной: тупик в ParallelDeflateOutputStream.EmitPendingBuffers Почтовый индекс зависает.В конце дня мне придется скопировать этот код и начать заново с новой библиотекой.Мне нужно позвонить на мою последнюю работу и дать им понять, потому что я использовал эту библиотеку на своей последней работе.Скорее всего, им также придется копировать код.jnarkiewicz 30 мая в 18:31

Так что, если это действительно проблема, увеличение размера этих буферов просто снижает вероятность возникновения тупика и не является идеальным решением.

...