【发布时间】:2012-01-25 03:17:54
【问题描述】:
我将文件存储在 Blob 存储帐户内的一个容器中。我需要在第二个容器中创建一个 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);
}
}
有人可以提出更好的方法吗?
【问题讨论】:
-
是的,云服务 webrole/workrole 中的内存、CPU 等资源使用情况始终受到关注。值得考虑。 +1
标签: c# azure zip azure-blob-storage dotnetzip