Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ionic.Zip (DotNetZip) hangs with in save method with IO.MemoryStream

I'll try to create an zip file with the DotNetZip-Libary with 106 Images (675MB) with the following code:

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

When I run this code, the execution stops usally at image 40 (sometimes earlier) without any exeption. Nothing happens. I tried to save the zip directly to a file. It works.

Any ideas?

Jan

like image 739
Jan Avatar asked Jan 16 '11 21:01

Jan


2 Answers

SET the zip object property ParallelDeflateThreshold to -1 just before saving the zip file

zip.ParallelDeflateThreshold = -1



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

like image 153
Nitin S Avatar answered Sep 20 '22 16:09

Nitin S


It's been almost 2 years since your question, so I doubt this will help but I just encountered the same problem in v1.9.1.8.

I worked around it by increasing the BufferSize and CodecBufferSize ZipFile properties to 1MB each.

I can't download the DotNetZip source because of filters at work but here is a very-likely-related comment from http://dotnetzip.codeplex.com/releases/view/68268

There is a pretty major bug in the code. I am working to figure it out. Another chap logged it before me: Deadlock in ParallelDeflateOutputStream.EmitPendingBuffers The zip hangs. End-of-day I will have to rip this code out and start over with a new library. I need to call my last job and give them a head's up b/c I used this library at my last job. They will likely have to rip the code out too. by jnarkiewicz on May 30 at 6:31 PM

So if this is indeed the problem, increasing the size of those buffers just lowers the likelihood of the deadlock occurring and is not an ideal solution.

like image 21
Wes Cumberland Avatar answered Sep 20 '22 16:09

Wes Cumberland