2011-12-21 23 views
5

ブロブストレージアカウント内の1つのコンテナにファイルが保存されています。最初のコンテナからのファイルを含む2番目のコンテナにzipファイルを作成する必要があります。紺碧のブロブストレージ内のzipファイルを作成する

私はワーカーロールとDotNetZipを使用して動作するソリューションを持っていますが、zipファイルのサイズが1GBになる可能性があるため、MemoryStreamオブジェクトなどを使用してすべての作業を行うことが最善の方法ではないこれを行うの。私の最大の関心事は、このプロセスが1日に数回発生する可能性があるので、メモリの使用量とリソースの解放です。以下は

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

} 

は、誰かがより良いアプローチをしてくださいお勧めすることはできますか?

+0

ラテン語を使用する場合+1。 ;) – TrueWill

+0

ええ、メモリやCPUのようなリソース使用量は、webrole/workroleというクラウドサービス内で常に懸念されます。それは考慮に値する。 +1 –

答えて

3

この質問を書いている時点で、私はAzureで利用可能なLocalStorageオプションを知らなかった。私はこのファイルに個別にファイルを書き込んで、LocalStorage内でそれらのファイルと一緒に作業してから、ブロブストレージに書き戻すことができました。

+2

少し説明/例がありますか?これは実際には答えではありません – stuartdotnet

+1

ここに例がありますhttp://stackoverflow.com/a/18853179/1280068 – stuartdotnet

1

メモリが大量にメモリを占有していて、自分のストリームを実装してストリームを読み込んでいるときに、ストリームにZIPファイルを追加して、すでに読み込まれたファイルを削除することが心配ならばストリームから。これは、メモリストリームのサイズを1つのファイルのサイズに保ちます。

+0

任意のコードサンプルですか? –