Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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# 在azure blob存储中原位创建zip文件_C#_Azure_Zip_Azure Storage Blobs_Dotnetzip - Fatal编程技术网

C# 在azure blob存储中原位创建zip文件

C# 在azure blob存储中原位创建zip文件,c#,azure,zip,azure-storage-blobs,dotnetzip,C#,Azure,Zip,Azure Storage Blobs,Dotnetzip,我将文件存储在blob存储帐户中的一个容器中。我需要在第二个容器中创建一个zip文件,其中包含来自第一个容器的文件 我有一个使用工作者角色和DotNetZip的解决方案,但由于zip文件的大小可能最终为1GB,我担心使用MemoryStream对象等来完成所有过程中的工作不是最好的方法。我最担心的是内存使用和释放资源,因为这个过程可能一天发生几次 下面是一些非常精简的代码,显示了worker角色中的基本流程: using (ZipFile zipFile = new ZipFile()) {

我将文件存储在blob存储帐户中的一个容器中。我需要在第二个容器中创建一个zip文件,其中包含来自第一个容器的文件

我有一个使用工作者角色和DotNetZip的解决方案,但由于zip文件的大小可能最终为1GB,我担心使用
MemoryStream
对象等来完成所有过程中的工作不是最好的方法。我最担心的是内存使用和释放资源,因为这个过程可能一天发生几次

下面是一些非常精简的代码,显示了worker角色中的基本流程:

using (ZipFile zipFile = new ZipFile())
{
    foreach (var uri in uriCollection)
    {
        var blob = new CloudBlob(uri);

        byte[] fileBytes = blob.DownloadByteArray();

        using (var fileStream = new MemoryStream(fileBytes))
        {
            fileStream.Seek(0, SeekOrigin.Begin);

            byte[] bytes = CryptoHelp.EncryptAsBytes(fileStream, "password", null);

            zipFile.AddEntry("entry name", bytes);
        }
    }

    using (var zipStream = new MemoryStream())
    {
        zipFile.Save(zipStream);
        zipStream.Seek(0, SeekOrigin.Begin);

        var blobRef = ContainerDirectory.GetBlobReference("output uri");
        blobRef.UploadFromStream(zipStream);
    }

}

有人能建议一个更好的方法吗

如果您所担心的只是memorysteam占用了太多内存,那么您可以实现自己的流,在读取流时,将zip文件添加到流中,并从流中删除已读取的文件。这将使您的内存流大小保持在一个文件的大小。

在撰写此问题时,我不知道Azure中提供的LocalStorage选项。我可以将文件单独写入本地存储中,并在本地存储中使用它们,然后将它们写回blob存储。

是的,云服务webrole/workrole中的内存、CPU等资源使用一直是个问题。这是值得考虑的+1有没有机会解释一下/举例说明一下?这不是一个真正的答案