c# - 将文件添加到 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 的方法?我已经尝试了所有的压缩,但结果是一样的
解决方案
我测试了你的例子(下面的完整代码)
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
请参阅评论中的重复项。这可能会帮助你。
推荐阅读
- java - 如何在 Spring Boot 应用程序中动态注入和使用多个数据源?
- ionic-framework - 发布应用程序的更新版本时,是否在 ios 上保留离子存储
- powerapps - Power app 在文本框中显示一列的所有行
- cassandra - 我可以在 cassandra Query 的 Blob 列字段中进行逻辑查询吗?
- sql - 目前有多少家银行的评级为 B+ 或以上,它们最后一次低于(日期索引)是什么时候
- axios - 通过 ngrok 使用代理时 axios 调用数据被截断
- sql - 有没有办法在不使用数据库连接的情况下使用 SQL 语句在 NetBeans 上查询 CSV 文件?
- git - 如何计算 Azure Repo 中提出的已完成拉取请求的总数?
- ios - BLE 设备未在蓝牙设置中的蓝牙设备列表下列出
- reactjs - RecordRTC - MediaRecorder API 似乎无法记录 mimeType: video/webm