5

次のコードを使用して、DotNetZip-Libary with 106 Images(675MB)を使用して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を直接ファイルに保存しようとしました。できます。

何か案は?

1月

4

2 に答える 2

16

zip ファイルを保存する直前にzip オブジェクトのプロパティParallelDeflateThresholdを設定します。-1

zip.ParallelDeflateThreshold = -1



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

于 2014-02-25T06:18:01.413 に答える
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 分

したがって、これが実際に問題である場合、これらのバッファーのサイズを大きくすると、デッドロックが発生する可能性が低くなるだけであり、理想的な解決策ではありません。

于 2012-11-14T18:14:30.137 に答える