2011-12-21 5 views
5

블랍 저장소 계정 내의 하나의 컨테이너에 파일이 저장되어 있습니다. 첫 번째 컨테이너의 파일을 포함하는 두 번째 컨테이너에 zip 파일을 만들어야합니다.푸른 색 블로 브 (blured) 저장소 내에서 zip 파일 만들기

저는 작업자 역할과 DotNetZip을 사용하여 작동하는 솔루션을 가지고 있습니다.하지만 zip 파일이 1GB 크기가 될 수 있기 때문에 모든 작업을 진행 중이며 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); 
    } 

} 

는 사람이 더 나은 방법을하시기 바랍니다 제안 할 수 있습니다 : 아래

어떤 매우 코드 작업자의 역할에 기본 과정을 보여주는를 제거입니까?

+0

라틴어를 사용하는 경우 +1입니다. ;) – TrueWill

+0

예, 클라우드 서비스 webrole/workrole 내의 메모리, CPU와 같은 리소스 사용은 항상 걱정됩니다. 고려해야 할 가치가 있습니다. +1 –

답변

3

이 질문을 쓰는 시점에서 저는 Azure에서 사용 가능한 LocalStorage 옵션을 알지 못했습니다. 나는이 파일에 개별적으로 파일을 쓰고 LocalStorage 내에서 파일과 함께 작업 한 다음 BLOB 저장소에 다시 쓸 수있었습니다.

+2

약간의 설명/예가있을 수 있습니까? 이것은 실제로 대답이 아닙니다. – stuartdotnet

+1

여기에 예제가 있습니다. http://stackoverflow.com/a/18853179/1280068 – stuartdotnet

1

너무 많은 메모리를 차지하는 memorysteam이 걱정되는 경우 자신의 스트림을 구현하고 스트림을 읽을 때 스트림에 zip 파일을 추가하고 이미 읽은 파일을 제거하면됩니다. 스트림에서. 이렇게하면 메모리 스트림 크기가 하나의 파일 크기로 유지됩니다.

+0

모든 코드 샘플? –