我将尝试使用带有106个图像(675MB)的DotNetZip-Libary创建一个zip文件,其代码如下:
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直接保存到文件中。有用。
有什么想法吗?
扬
答案 0 :(得分:15)
在保存zip文件之前将zip对象属性ParallelDeflateThreshold
设置为-1
zip.ParallelDeflateThreshold = -1
答案 1 :(得分:9)
你的问题已经差不多2年了,所以我怀疑这会有所帮助,但我在v1.9.1.8中遇到了同样的问题。
我通过将 BufferSize 和 CodecBufferSize ZipFile属性增加到每个1MB来解决这个问题。
我无法下载DotNetZip来源,因为过滤器在工作,但这是一个非常可能相关的评论来自http://dotnetzip.codeplex.com/releases/view/68268
代码中存在一个相当大的错误。我正在努力解决这个问题。另一个人在我之前记录了它:ParallelDeflateOutputStream.EmitPendingBuffers中的死锁zip挂起。在今天结束时,我将不得不翻录这个代码并重新开始使用新库。我需要打电话给我的上一份工作并给他们一个头脑,我在上一份工作中使用了这个库。他们可能也不得不撕掉代码。 作者:jnarkiewicz于5月30日下午6:31
因此,如果这确实是问题,增加这些缓冲区的大小只会降低发生死锁的可能性,并且不是理想的解决方案。