2011-12-21 13 views
5

I file sono archiviati in un contenitore all'interno di un account di archiviazione BLOB. Devo creare un file zip in un secondo contenitore contenente i file dal primo contenitore.Creazione di un file zip all'interno della memoria BLOB BLU

Ho una soluzione che funziona utilizzando un ruolo di lavoro e DotNetZip ma perché il file zip potrebbe finire per essere di 1 GB di dimensioni sono preoccupato che fare tutto il lavoro in-process, utilizzando oggetti MemoryStream ecc non è il modo migliore di fare questo. La mia più grande preoccupazione è quella dell'utilizzo della memoria e della liberazione delle risorse, poiché questo processo potrebbe verificarsi più volte al giorno.

seguito alcune molto ridotta di codice che mostra il processo di base nel ruolo dei lavoratori:

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); 
    } 

} 

Qualcuno può suggerire un approccio migliore per favore?

+0

+1 per l'utilizzo del latino. ;) – TrueWill

+0

Sì, l'utilizzo delle risorse come memoria, CPU nei servizi cloud webrole/workrole è sempre interessato. È degno di essere considerato. +1 –

risposta

3

Al momento della stesura di questa domanda, non ero a conoscenza delle opzioni LocalStorage disponibili in Azure. Sono stato in grado di scrivere file individualmente su questo e sul lavoro con loro all'interno di LocalStorage e poi di scriverli nuovamente su blob storage.

+2

Qualche possibilità di un po 'di spiegazione/esempio? Questa non è davvero una risposta – stuartdotnet

+1

trovato un esempio qui http://stackoverflow.com/a/18853179/1280068 – stuartdotnet

1

Se tutto ciò che ti preoccupa è che il tuo memorysteam occupa troppa memoria, allora quello che puoi fare è implementare il tuo stream e mentre il tuo stream viene letto, tu aggiungi i file zip allo stream e rimuovi i file già letti dal flusso. Ciò manterrà la dimensione del tuo flusso di memoria alla dimensione di un file.

+0

qualsiasi esempio di codice? –

Problemi correlati