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?
+1 để sử dụng tiếng Latinh. ;) – TrueWill
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 –