Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AWS lambda处理大型zip文件?_C#_Amazon S3_.net Core_Aws Lambda_Aws Sdk Net - Fatal编程技术网

C# 如何使用AWS lambda处理大型zip文件?

C# 如何使用AWS lambda处理大型zip文件?,c#,amazon-s3,.net-core,aws-lambda,aws-sdk-net,C#,Amazon S3,.net Core,Aws Lambda,Aws Sdk Net,我想从s3中读取100K+的文件,并将它们压缩成一个大文件。单个文件的大小可以在几Kb到1MB之间,最终的zip文件可以轻松超过3GB。 给定AWS Lambda的内存限制为3GB,目录存储为512MB。使用AWS lambda,您将如何做到这一点?我正在使用.NETCore3 当zip大小超过3Gb时,以下代码将失败 var zipStream = new MemoryStream(); using (System.IO.Compression.ZipArchive zip =

我想从s3中读取100K+的文件,并将它们压缩成一个大文件。单个文件的大小可以在几Kb到1MB之间,最终的zip文件可以轻松超过3GB。 给定AWS Lambda的内存限制为3GB,目录存储为512MB。使用AWS lambda,您将如何做到这一点?我正在使用.NETCore3

当zip大小超过3Gb时,以下代码将失败

    var zipStream = new MemoryStream();
    using (System.IO.Compression.ZipArchive zip = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
    {
        for(int i =0;i<sourceFils.Count;i++)
        {
            
            var zipItem = zip.CreateEntry("file"+i.ToString()+".pdf");

            using (var entryStream = zipItem.Open())
            {
                var source  = GetFileFromS3(sourceFiles[i]);
                await source.CopyToAsync(entryStream);
            }
        }
    }

     //upload zip file to S3. For brevity Upload code is not included.
    _s3Client.Upload(zipStream); 
var zipStream=newmemoryStream();
使用(System.IO.Compression.ZipArchive zip=new ZipArchive(zipStream,ZipArchiveMode.Create,true))
{
对于(inti=0;i,从今天(2020年12月1日)开始,您最多可以分配10GB的内存。这对于您的目的来说已经足够了,至少现在是这样

另一种选择可能是利用Amazon EFS进行存储,前提是您可以调整代码以避免将其全部存储在内存中。EFS对Lambda的支持已于今年早些时候推出。

从今天(2020年12月1日)开始,您最多可以分配10 GB的内存。这可能足以满足您的需要,至少目前是这样


另一种选择可能是利用Amazon EFS进行存储,前提是您可以调整代码以避免将其全部存储在内存中。EFS对Lambda的支持已于今年早些时候推出。

如果您的总存储空间为3GB(RAM)+0.5GB(磁盘),则显然无法超过3.5GB(可能小于此)。您需要更多空间->AWS lambda不适合此任务您可以在内存不足时使用交换空间,这将使用临时文件代替内存。它运行速度较慢,但可以解决问题。请参阅:@jdweng我认为这仅适用于EC2实例,而不适用于无服务器lambda。不过,我可能是错的。@LP13:如果计算机有文件系统,请参阅m(智能卡)那么它是适用的。与无服务器无关。Lambda是事件驱动的。如果你只做一次,那么用合理的磁盘空间启动EC2最容易,运行程序,并摆脱EC2。如果你需要经常这样做,那么用正确的“东西”创建EC2 AMI如果您的总存储空间为3GB(RAM)+0.5GB(磁盘),则显然无法超过3.5GB(可能小于此值)。您需要更多空间->AWS lambda不适合此任务您可以在内存不足时使用交换空间,这将使用临时文件代替内存。它运行速度较慢,但可以解决问题。请参阅:@jdweng我认为这仅适用于EC2实例,而不适用于无服务器lambda。不过,我可能是错的。@LP13:如果计算机有文件系统,请参阅m(智能卡)那么它是适用的。与无服务器无关。Lambda是事件驱动的。如果你只做一次,那么用合理的磁盘空间启动EC2最容易,运行程序,并摆脱EC2。如果你需要经常这样做,那么用正确的“东西”创建EC2 AMI并使用它创建临时EC2,并根据需要运行它。准时:)准时:)