首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OutOfMemoryException创建大型ZIP文件时的System.IO.Packaging

使用OutOfMemoryException创建大型ZIP文件时的System.IO.Packaging
EN

Stack Overflow用户
提问于 2011-10-21 03:35:09
回答 2查看 3K关注 0票数 6

我正在尝试调试使用OutOfMemoryException创建相当大的ZIP文件时发生的System.IO.Packaging.ZipPackage

代码遍历大量对象列表,为每个对象执行以下操作。

将对象数据序列化为临时文件的FileStream

  • Target

  • 为该文件创建PackagePart

  • 从源System.IO.Stream复制到另一个源文件:H 112源代码流:流:PackagePart::GetStream() => System.IO.Stream

最后,它调用Package::Close()来保存文件。

我遇到的问题是,对于一个特别大的对象列表,我看到的是一个OutOfMemoryException ( x86进程大小正在达到大约1.2GB )。

我在考虑将对象数据分割成块,所以每个循环只处理较小的数量(即上面的步骤1-3 )。我的想法是在一个临时目录中创建n ZIP文件,然后找到一种方法将它们合并到一个存档中。

这有可能使用System.IO.Packaging吗?我会用什么来组合这些部件?

还是有更好的方法来解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-24 04:15:03

在创建新包之间对包对象调用Flush方法可能会解决这个问题,因为这将导致内存缓冲区被刷新到磁盘。

票数 3
EN

Stack Overflow用户

发布于 2011-10-21 03:50:57

我会使用DotNetZip库(http://dotnetzip.codeplex.com/)。我尝试过几个压缩库(像您目前使用的System.IO和SharpZibLib),到目前为止最容易使用的是DotNetZip库。

您几乎肯定会得到较少的代码行,并且我发现内存使用情况非常好(在我报告的虚拟机环境中遇到了问题,并有一个新的版本修复了它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7844687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档