我正在使用https://github.com/stefangordon/azure-encryption-extensions中的DownloadToStreamEncrypted扩展名,它适用于小文件。我注意到它将整个流加载到内存中。 我正在使用ASP.Net WebAPI。这是我的代码:
var stream = new MemoryStream();
await blob.DownloadToStreamEncryptedAsync(provider, stream);
stream.Seek(0, SeekOrigin.Begin);
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(stream);
response.Content.Headers.ContentLength = docLength;
response.Content.Headers.ContentType = new MediaTypeHeaderValue(doc.MimeType);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "somefilename",
Size = docLength
};
return response;
这样可行,但是文件使用的内存有多大。它实际上并没有流回文件。是否有一些我在使用导致高内存使用的流时出错了?理想情况下,它只是从服务器流回而不首先完全加载到内存中。我怀疑问题是DownloadToStreamEncrypted中的CopyToAsync方法,但我不确定。
DownloadToStreamEncrypted的代码是
using (Stream blobStream = await blob.OpenReadAsync(accessCondition, options, operationContext))
using (Stream decryptedStream = provider.DecryptedStream(blobStream))
{
await decryptedStream.CopyToAsync(stream);
}
我可以做些什么来降低内存使用量吗?