【问题标题】:Ionic zip throws out of memory exceptionIonic zip 抛出内存不足异常
【发布时间】:2012-06-14 06:43:36
【问题描述】:

我使用 ionic zip (version-1.9.1.8) 来压缩一些文件..我通常有 2 到 3 GB 的大文件...这个 ionic zip 在我的系统中运行良好,但是当我在另一个用户中使用它时machine(ONSITE)...这个 ionic zip 抛出异常如下。两个系统的配置是一样的。

Exception details:
******************
[6/11/2012 01:21:38:812]
 System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at Ionic.Zip.ZipEntry._WriteEntryData(Stream s)
   at Ionic.Zip.ZipEntry.Write(Stream s)
   at Ionic.Zip.ZipFile.Save()
   at Ionic.Zip.ZipFile.Save(String fileName)
   at MyCode.SaveZipFile()

[6/11/2012 01:21:38:828]

System.NullReferenceException: Object reference not set to an instance of an object.
   at Ionic.Zlib.ParallelDeflateOutputStream._Flush(Boolean lastInput)
   at Ionic.Zlib.ParallelDeflateOutputStream.Close()
   at Ionic.Zlib.ParallelDeflateOutputStream.Dispose()
   at Ionic.Zip.ZipFile.Dispose(Boolean disposeManagedResources)
   at Ionic.Zip.ZipFile.Dispose()
   at Mycode.SaveZipFile()
   at Mycode.SaveLogs()

有人可以帮我找出这些问题的原因吗??

提前致谢

【问题讨论】:

  • 添加更多内存? :) 'System.OutOfMemoryException' 非常严重。因此,您要么需要避免它,要么使用另一个更高效的 zip 解码器而不是 icon.zip。 SharpDevlops Zip 怎么样?
  • 我买不起另一个压缩工具...必须有一些东西来解决这个问题,因为我没有在我的系统中遇到这个内存问题..
  • 愚蠢的问题:您的系统是否比崩溃的系统拥有更多内存?
  • 配置并不一定意味着内存。 “也许我建议你”在要求其他人解决你的问题时要礼貌一点...... :) 我现在将在别处采纳我的建议。

标签: c# windows logging zip utilities


【解决方案1】:

您需要显示代码。如果您的应用程序正在压缩到内存流中,它将容易受到内存不足的影响。这将是您的应用程序中的问题,而不是库中的问题。

另外 - 我从堆栈跟踪中看到它正在使用并行 deflater。这会以运行时换取内存。如果您有内存问题,您可以禁用并行压缩,并使用更少的内存。

在您的代码中通过类似的方式执行此操作:

 zip.ParallelDeflateThreshold = -1;

另请参阅有关此功能的文档: http://cheeso.members.winisp.net/DotNetZipHelp/html/0988edb5-1d59-2875-8e77-ad195601cbce.htm

【讨论】:

  • 谢谢 cheeso ..我了解 ParallelDeflateThreshold 的使用 ..在您提供的链接中指出“此属性的默认值为 -1,这意味着除非您设置,否则不会执行并行压缩归零。”那么我是否应该将此属性设置为零并检查一下..还有 ionic zip 使用的默认压缩方法是什么...
  • 默认压缩为 DEFLATE。尝试将阈值明确设置为 -1。不确定这实际上是默认值。试试看。
  • 我已将阈值设置为 -1,然后我也导致异常,唯一的区别是此异常会在一段时间后发生..我在另一篇关于使用 zipoutputstream 的文章中阅读过。 ..我应该使用它而不是 zipfile 类..并注意我尝试压缩大于 2GB 的文件
  • 嗯,我不知道你的代码是什么样的,所以很难说。使用库的方式可能会导致内存不足错误,并且使用的简单优化可以避免该问题。但我不能说是不是这样,因为我还没有看到你的代码。对于结构正确的代码,切换到 ZipOutputStream 不会使用显着减少的内存。你应该使用你觉得最舒服的类。流式传输时,您可能会认为 zipoutputstream 是更自然的选择。
  • 感谢 cheeso 抽出宝贵时间。我这里有一个巨大的代码,所以我刚刚在我的项目中添加了 zip 文件范围。这就是它的运行方式。this._zip.AddEntry(archieveDir, streamReader.ReadToEnd()); this._zip.AddEntry(archieveDir, FileStream); this._zip.Save(this._zipFilePath); ->这会引发异常。请注意,文件流中有大量超过 1.5 GB 的文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 2015-10-27
  • 1970-01-01
相关资源
最近更新 更多