2011-12-21 30 views
5

Tôi có các tệp được lưu trữ trong một vùng chứa trong tài khoản lưu trữ blob. Tôi cần tạo một tệp zip trong vùng chứa thứ hai chứa các tệp từ vùng chứa đầu tiên.Tạo một tệp zip tại chỗ trong bộ nhớ blob xanh dương

Tôi có một giải pháp hoạt động bằng cách sử dụng vai trò công nhân và DotNetZip nhưng vì tệp zip có thể có kích thước 1GB, tôi lo ngại rằng thực hiện tất cả công việc đang xử lý, sử dụng đối tượng MemoryStream. làm điều này. Mối quan tâm lớn nhất của tôi là việc sử dụng bộ nhớ và giải phóng tài nguyên cho rằng quá trình này có thể xảy ra nhiều lần trong ngày.

Dưới đây là một số rất tước xuống mã hiển thị quá trình cơ bản trong vai trò nhân viên:

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

} 

Ai đó có thể đề nghị một phương pháp tốt hơn xin vui lòng?

+0

+1 để sử dụng tiếng Latinh. ;) – TrueWill

+0

Vâng, Việc sử dụng tài nguyên như bộ nhớ, CPU trong dịch vụ đám mây webrole/workrole luôn được quan tâm. Nó là xứng đáng để được xem xét. +1 –

Trả lời

3

Tại thời điểm viết câu hỏi này, tôi không biết các tùy chọn LocalStorage có sẵn trong Azure. Tôi đã có thể ghi các tệp riêng lẻ này và làm việc với chúng trong LocalStorage và sau đó ghi chúng trở lại kho lưu trữ blob.

+2

Bất kỳ cơ hội nào của một chút giải thích/ví dụ? Đây không thực sự là câu trả lời – stuartdotnet

+1

tìm thấy một ví dụ ở đây http://stackoverflow.com/a/18853179/1280068 – stuartdotnet

1

Nếu tất cả những gì bạn lo lắng là bộ nhớ của bạn chiếm quá nhiều bộ nhớ thì bạn có thể thực hiện luồng của riêng mình và khi luồng của bạn đang được đọc, bạn thêm tệp zip vào luồng và xóa tệp đã đọc từ luồng. Điều này sẽ giữ kích thước luồng bộ nhớ của bạn với kích thước của một tệp.

+0

bất kỳ mẫu mã nào? –

Các vấn đề liên quan