Mam pliki przechowywane w jednym kontenerze na koncie magazynu blob. Potrzebuję utworzyć plik zip w drugim kontenerze zawierającym pliki z pierwszego kontenera.Tworzenie pliku zip in situ w magazynie błękitu BLU
Mam rozwiązanie, które działa przy użyciu roli pracownika i DotNetZip, ale ponieważ plik zip może mieć rozmiar 1 GB Obawiam się, że wykonywanie wszystkich prac w toku przy użyciu obiektów MemoryStream
itp. Nie jest najlepszym sposobem robienia tego. Moim największym zmartwieniem jest wykorzystanie pamięci i uwalnianie zasobów, ponieważ proces ten może odbywać się kilka razy dziennie.
Poniżej kilka bardzo okrojona kod pokazujący podstawowy proces w roli pracownika:
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);
}
}
Może ktoś sugerują lepsze podejście proszę?
+1 za używanie łaciny. ;) – TrueWill
Tak, wykorzystanie zasobów jak pamięć, procesor w usługach w chmurze webrole/workrole jest zawsze zainteresowany. Warto się nad tym zastanowić. +1 –