通过WebAPI下载Azure Blob时的高内存使用率

时间:2016-09-16 13:05:58

标签: c# asp.net-web-api

我正在使用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);
            }

我可以做些什么来降低内存使用量吗?

0 个答案:

没有答案