首页 > 解决方案 > 将文件添加到 ZipArchive 会导致 OutOfMemory 异常

问题描述

我正在创建一个 zip 文件,代码如下

ZipArchive MyZipArchive = System.IO.Compression.ZipFile.Open(@"c:\ZipProject\Test.zip", ZipArchiveMode.Update);

然后我将文件添加到 zip 中,如下所示。fielList 中有大约 10 个文件,每个文件大小为 250 mb

foreach (string f in fileList)
{ 
     MyZipArchive.CreateEntryFromFile(f,Path.GetFileName(f),CompressionLevel.Fastest );
}

在第一个文件上,我得到 OutOfMeomry 异常 是否有将大文件添加到 zip 的方法?我已经尝试了所有的压缩,但结果是一样的

标签: c#

解决方案


我测试了你的例子(下面的完整代码)

using System;
using System.IO;
using System.IO.Compression;

namespace ZipTest
{
  internal static class Program
  {
    private static void Main()
    {
      var fileList = new[] { @"d:\Test\file1", @"d:\Test\file2", @"d:\Test\file3", @"d:\Test\file4",
        @"d:\Test\file5", @"d:\Test\file6", @"d:\Test\file7", @"d:\Test\file8", @"d:\Test\file9", @"d:\Test\file10" };
      using (var MyZipArchive = ZipFile.Open(@"d:\Test\Test.zip", ZipArchiveMode.Update))
      {
        foreach (var f in fileList)
        {
          Console.WriteLine("Compressing: " + f);
          MyZipArchive.CreateEntryFromFile(f, Path.GetFileName(f), CompressionLevel.Fastest);
        }
      }
    }
  }
}

文件总大小约为 2 GB,压缩后的大小几乎相同(我使用了安装程序,因为我没有找到任何其他大文件)。

第一次运行导致内存不足异常(在最后一个文件之后)。这似乎导致 Windows 清除(释放未使用的)内存,并且没有其他运行导致异常。应用程序的总虚拟内存约为 3.5 GB

请参阅评论中的重复项。这可能会帮助你。


推荐阅读