У меня есть файлы, хранящиеся в одном контейнере в учетной записи хранения BLOB-объектов.Мне нужно создать zip-файл во втором контейнере, содержащем файлы из первого контейнера.
У меня есть решение, которое работает с использованием рабочей роли и DotNetZip, но, поскольку размер zip-файла может достигать 1 ГБ, яЯ обеспокоен тем, что выполнение всей работы в процессе, использование MemoryStream
объектов и т. д. не лучший способ сделать это.Больше всего меня беспокоит использование памяти и освобождение ресурсов, учитывая, что этот процесс может происходить несколько раз в день.
Ниже приведен некоторый очень урезанный код, показывающий базовый процесс в рабочей роли.:
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);
}
}
Может кто-нибудь предложить лучший подход, пожалуйста?